SSO单点登录系统接入的例子
发布:smiling 来源: PHP粉丝网 添加日期:2018-10-31 22:58:49 浏览: 评论:0
简单讲一下 SSO 单点登录系统的接入的原理,前提是系统本身有完善的用户认证功能,即基本的用户登录功能,那做起来就很方便了。
SSO 登录请求接口往往是接口加上一个回调地址,访问这个地址会跳转到回调地址并带上一个 ticket 参数,拿着这个 ticket 参数再请求接口可以获取到用户信息,如果存在用户则自动登录,不存在就新增用户并登录。
比如这个 SSO 模型实现了两个方法,一个是获取接口 url,一个是凭 ticket 获取用户信息:
PHP:
- 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 (emptyempty($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');
- } //phpfensi.com
- return true;
- }
大概看看这个控制器逻辑就明白了。SSO 接口起到的作用就是获取用户信息,拿这个用户信息跟系统用户表对比,存在用户则进行登录,不存在创建用户并登录。
这是一个内部的单点系统,集成到后台,可能其他的 SSO 跟这不太一样,但基本原理过程差不多。
Tags: SSO单点登录 SSO系统接入
相关文章
- ·php sso单点登录实现代码(2014-09-04)
- ·php的sso单点登录实现方法(2021-05-08)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)