php实现的SSO单点登录系统接入功能示例分析


Posted in PHP onOctober 12, 2016

本文实例讲述了php实现的SSO单点登录系统接入功能。分享给大家供大家参考,具体如下:

SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一,下面我们来看看吧。

简单讲一下 SSO 单点登录系统的接入的原理,前提是系统本身有完善的用户认证功能,即基本的用户登录功能,那做起来就很方便了。

SSO 登录请求接口往往是接口加上一个回调地址,访问这个地址会跳转到回调地址并带上一个 ticket 参数,拿着这个 ticket 参数再请求接口可以获取到用户信息,如果存在用户则自动登录,不存在就新增用户并登录。

比如这个 SSO 模型实现了两个方法,一个是获取接口 url,一个是凭 ticket 获取用户信息:

interface SSOLogin
{
  /**
   * 获取登录用户信息
   * @param $ticket
   * @return mixed
   */
  public function getInfoFromTicket($ticket);
  /**
   * 单点登录授权地址
   * @return mixed
   */
  public function getAuthUrl();
}

再来看看控制器的主要方法,比如回调地址是跳转到控制器 http://www.example.com/sso/check?ticket=xxxx

/**
 * 检测是否单点登录
 * @return bool|string
 */
public function actionCheck()
{
  $ticket = Yii::$app->getRequest()->get('ticket');
  if (!$ticket) {
    return $this->renderAuthError('请先授权', sprintf('<a href="%s">点击登录单点登录系统</a>', SSOlogin::getInstance()->getAuthUrl()));
  }
  $userInfo = SSOlogin::getInstance()->getInfoFromTicket($ticket);
  if (empty($userInfo['username'])) {
    return $this->renderAuthError('请先授权', sprintf('<a href="%s">点击登录单点登录系统</a>', SSOlogin::getInstance()->getAuthUrl()));
  }
  $username = $this->getUserName($userInfo['username']);
  $user = User::find()->canLogin()->username($username)->one();
  if (!$user) {
    $newUser = [];
    $newUser['username'] = $userInfo['username'];
    $newUser['email'] = $this->getUserName($userInfo['username']);
    $newUser['role'] = User::ROLE_DEV;
    $newUser['is_email_verified'] = 1;
    $newUser['realname'] = $userInfo['truename'];
    $user = $this->addUser($newUser);
  }
  $isLogin = Yii::$app->user->login($user, 3600 * 24 * 30);
  if ($isLogin) {
    $this->redirect('/task/index');
  }
  return true;
}

大概看看这个控制器逻辑就明白了。SSO 接口起到的作用就是获取用户信息,拿这个用户信息跟系统用户表对比,存在用户则进行登录,不存在创建用户并登录。

这是一个内部的单点系统,集成到后台,可能其他的 SSO 跟这不太一样,但基本原理过程差不多。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
实现“上一页”和“下一页按钮
Oct 09 PHP
PHP 八种基本的数据类型小结
Jun 01 PHP
PHP函数篇之掌握ord()与chr()函数应用
Dec 05 PHP
PHP循环结构实例讲解
Feb 10 PHP
php实现读取内存顺序号
Mar 29 PHP
php实现粘贴截图并完成上传功能
May 17 PHP
php自动识别文字编码并转换为目标编码的方法
Aug 08 PHP
mysql alter table命令修改表结构实例详解
Sep 24 PHP
PHP5.6新增加的可变函数参数用法分析
Aug 25 PHP
Laravel中的Blade模板引擎示例详解
Oct 10 PHP
PHP实现的敏感词过滤方法示例
Mar 06 PHP
laravel ORM关联关系中的 with和whereHas用法
Oct 16 PHP
php用户密码加密算法分析【Discuz加密算法】
Oct 12 #PHP
基于php实现的php代码加密解密类完整实例
Oct 12 #PHP
php fseek函数读取大文件两种方法
Oct 12 #PHP
PHP从二维数组得到N层分类树的实现代码
Oct 11 #PHP
php 无限分类 树形数据格式化代码
Oct 11 #PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
Oct 11 #PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
Oct 11 #PHP
You might like
php递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
2012/09/23 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
Javascript new关键字的玄机 以及其它
2010/08/25 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
Jquery Mobile 自定义按钮图标
2015/11/18 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
javascript实现移动端上的触屏拖拽功能
2016/03/04 Javascript
require.js中的define函数详解
2017/07/10 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
2019/08/27 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
简单说明Python中的装饰器的用法
2015/04/24 Python
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
Python 对象中的数据类型
2017/05/13 Python
python+pyqt实现右下角弹出框
2017/10/26 Python
Python爬虫框架Scrapy实例代码
2018/03/04 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
python中PyQuery库用法分享
2021/01/15 Python
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
局域网标准
2016/09/10 面试题
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
户籍证明格式
2014/09/15 职场文书
初中体育课教学反思
2016/02/16 职场文书