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 相关文章推荐
真正面向对象编程:PHP5.01发布
Oct 09 PHP
用PHP实现WEB动态网页静态
Oct 09 PHP
ajax+php打造进度条 readyState各状态
Mar 20 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
Nov 07 PHP
javascript数组与php数组的地址传递及值传递用法实例
Jan 22 PHP
php获取从html表单传递数组的方法
Mar 20 PHP
php基于curl扩展制作跨平台的restfule 接口
May 11 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
Dec 25 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
PHP简单判断字符串是否包含另一个字符串的方法
Mar 25 PHP
PHP如何将XML转成数组
Apr 04 PHP
php面试实现反射注入的详细方法
Sep 30 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
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
php初始化对象和析构函数的简单实例
2014/03/11 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
JQuery中each()的使用方法说明
2010/08/19 Javascript
用js正确判断用户名cookie是否存在的方法
2014/01/28 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
javascript检测两个数组是否相似
2015/05/19 Javascript
Kindeditor单独调用多图上传实例
2017/07/31 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
vuex进阶知识点巩固
2018/05/20 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
jQuery滑动效果实现方法分析
2018/09/05 jQuery
VUE使用axios调用后台API接口的方法
2020/08/03 Javascript
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
python实现域名系统(DNS)正向查询的方法
2016/04/19 Python
对Python中的@classmethod用法详解
2018/04/21 Python
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
2019/06/05 Python
python挖矿算力测试程序详解
2019/07/03 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
python安装scipy的步骤解析
2019/09/28 Python
wxPython实现文本框基础组件
2019/11/18 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
python爬虫可以爬什么
2020/06/16 Python
如何利用python读取micaps文件详解
2020/10/18 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
药店主任岗位责任制
2014/02/10 职场文书
应届毕业生求职信
2014/05/26 职场文书
经济国贸专业求职信
2014/06/18 职场文书
2014红色之旅心得体会
2014/10/07 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
学习经验交流会总结
2015/11/02 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书