当前位置:首页 > PHP教程 > php高级应用 > 列表

SSO单点登录系统接入的例子

发布:smiling 来源: PHP粉丝网  添加日期:2018-10-31 22:58:49 浏览: 评论:0 

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

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

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

PHP:

  1. interface SSOLogin 
  2.     /** 
  3.      * 获取登录用户信息 
  4.      * @param $ticket 
  5.      * @return mixed 
  6.      */ 
  7.     public function getInfoFromTicket($ticket); 
  8.  
  9.     /** 
  10.      * 单点登录授权地址 
  11.      * @return mixed 
  12.      */ 
  13.     public function getAuthUrl(); 

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

  1. /** 
  2.  * 检测是否单点登录 
  3.  * @return bool|string 
  4.  */ 
  5. public function actionCheck() 
  6.     $ticket = Yii::$app->getRequest()->get('ticket'); 
  7.     if (!$ticket) { 
  8.         return $this->renderAuthError('请先授权', sprintf('<a href="%s">点击登录单点登录系统</a>', SSOlogin::getInstance()->getAuthUrl())); 
  9.     } 
  10.     $userInfo = SSOlogin::getInstance()->getInfoFromTicket($ticket); 
  11.     if (emptyempty($userInfo['username'])) { 
  12.         return $this->renderAuthError('请先授权', sprintf('<a href="%s">点击登录单点登录系统</a>', SSOlogin::getInstance()->getAuthUrl())); 
  13.     } 
  14.  
  15.     $username = $this->getUserName($userInfo['username']); 
  16.     $user = User::find()->canLogin()->username($username)->one(); 
  17.     if (!$user) { 
  18.         $newUser = []; 
  19.         $newUser['username'] = $userInfo['username']; 
  20.         $newUser['email'] = $this->getUserName($userInfo['username']); 
  21.         $newUser['role'] = User::ROLE_DEV; 
  22.         $newUser['is_email_verified'] = 1; 
  23.         $newUser['realname'] = $userInfo['truename']; 
  24.         $user = $this->addUser($newUser); 
  25.     } 
  26.     $isLogin = Yii::$app->user->login($user, 3600 * 24 * 30); 
  27.     if ($isLogin) { 
  28.         $this->redirect('/task/index'); 
  29.     } //phpfensi.com 
  30.     return true; 

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

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

Tags: SSO单点登录 SSO系统接入

分享到:

相关文章