设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
立即注册
只需一步,快速开始
快捷导航
登录
注册
论坛首页
BBS
建站模版
微站设计
虚拟主机
企业邮箱
博客日志
Blog
搜索
搜索
搜索
热搜
长春
优惠
活动
做网站
本版
帖子
用户
本版
帖子
用户
请
登录
后使用快捷导航
没有帐号?
立即注册
道具
勋章
任务
留言板
设置
我的收藏
退出
时时商务社区
»
论坛首页
›
建站资源
›
建站技术
›
php实现的SSO单点登录系统接入功能示例分析 ...
返回列表
查看:
1410
|
回复:
0
php实现的SSO单点登录系统接入功能示例分析
[复制链接]
wx_pylelnL4
当前离线
积分
7532
2536
主题
2536
帖子
7532
积分
论坛元老
论坛元老, 积分 7532, 距离下一级还需 9992467 积分
论坛元老, 积分 7532, 距离下一级还需 9992467 积分
积分
7532
发消息
电梯直达
楼主
发表于 2018-2-14 05:32:02
|
只看该作者
|
倒序浏览
|
阅读模式
本文实例讲述了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('
点击登录单点登录系统
', SSOlogin::getInstance()->getAuthUrl()));
}
$userInfo = SSOlogin::getInstance()->getInfoFromTicket($ticket);
if (empty($userInfo['username'])) {
return $this->renderAuthError('请先授权', sprintf('
点击登录单点登录系统
', 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 curl用法总结
》、《
php socket用法总结
》、《
php正则表达式用法总结
》、《
php字符串(string)用法总结
》、《
PHP数组(Array)操作技巧大全
》、《
PHP数学运算技巧总结
》、《
php面向对象程序设计入门教程
》、《
PHP数据结构与算法教程
》、《
php程序设计算法总结
》及《
php常见数据库操作技巧汇总
》
希望本文所述对大家PHP程序设计有所帮助。
您可能感兴趣的文章:
推荐学习php sesson的朋友必看PHP会话(Session)使用入门
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
php的sso单点登录实现方法
PHP中SSO Cookie登录分析和实现
SSO单点登录的PHP实现方法(Laravel框架)
php array_udiff_assoc 计算两个数组的差集实例
PHP编程 SSO详细介绍及简单实例
分享到:
QQ好友和群
QQ空间
腾讯微博
腾讯朋友
收藏
0
回复
使用道具
举报
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
用户反馈
客户端