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 相关文章推荐
用PHP编程语言开发动态WAP页面
Oct 09 PHP
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
数字转英文
Dec 06 PHP
PHPCMS的使用小结
Sep 20 PHP
php mssql扩展SQL查询中文字段名解决方法
Oct 15 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
Dec 18 PHP
php通过ksort()函数给关联数组按照键排序的方法
Mar 18 PHP
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
Jul 01 PHP
使用图灵api创建微信聊天机器人
Jul 23 PHP
ThinkPHP中html:list标签用法分析
Jan 09 PHP
PHP生成制作验证码的简单实例
Jun 12 PHP
php获取ip及网址的简单方法(必看)
Apr 01 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
一个用mysql_odbc和php写的serach数据库程序
2006/10/09 PHP
PHP MySql增删改查的简单实例
2016/06/21 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
用jquery设置按钮的disabled属性的实现代码
2010/11/28 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
表单中单选框添加选项和移除选项
2016/07/04 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
JavaScript实现左右下拉框动态增删示例
2017/03/09 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
2020/11/05 Javascript
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
2014/07/04 Python
python中学习K-Means和图片压缩
2017/11/20 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
Django 静态文件配置过程详解
2019/07/23 Python
Python如何读取文件中图片格式
2020/01/13 Python
python中with用法讲解
2020/02/07 Python
如何在python中执行另一个py文件
2020/04/30 Python
Django全局启用登陆验证login_required的方法
2020/06/02 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
HR喜欢的自荐信格式
2013/10/08 职场文书
厂长岗位职责
2014/02/19 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
筑梦中国心得体会
2016/01/18 职场文书
A22国内电台短波广播频率表
2022/05/10 无线电
在虚拟机中安装windows server 2008的图文教程
2022/06/28 Servers