SSO单点登录的PHP实现方法(Laravel框架)


Posted in PHP onMarch 23, 2016

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。

简单说一下我的逻辑,我也不知道我理解sso对不对。

假如三个站点 a.baidu.com b.baidu.com c.baidu.com

a.baidu.com 作为验证用户登录账户。

b和c作为客户端(子系统)。

b和c需要登录的时候跳转到a,并且携带参数source指明登陆后跳转的链接。

a站点就是普通的登陆方式(校验用户密码),校验成功后做一些处理。需要生成一个ticket,具体怎么生成都可以,只要安全就可以了。然后存储到Cache里面。这里有疑问,后面总结。登陆成功后直接跳转到\(url就可以了。

``` php private function getTicketUrl(\)source)
{
\(ticket = md5(time()+key); Cache::put(\)ticket, $user, 120);
$url = $source . '?ticket=' . $ticket;
return $url;
}

假如说a站带着ticket跳转到b站(b.baidu.com?ticket=xxxxxxxxxxxxxxxx```)

b站做一个全局的过滤器,接受这个ticket然后请求a站验证ticket是否为a生成的。

b站过滤器App\Http\Middleware\CasAuthenticate代码,这里判断是否有ticket并发送请求到a站校验。如果是登陆的,则拿到用户UID进行登陆。

public function handle($request, Closure $next)
{
$ticket = $request->input('ticket');
if ($ticket) {
$result = json_decode('http://a.baidu.com' . '/auth/check-ticket?ticket=' . $ticket), true);
if ($result['state'] == "SUCCESS") {
$request->session()->flush();
Auth::loginUsingId($result['result']['uid']);
return redirect(redirect()->getUrlGenerator()->current());
}
}
return $next($request);
}

逻辑算是完成了,但是有几个疑问。

1.我这个实现,我自己都不知道是不是对的,这是我根据原理写出来的。

2.假如b站现在跳转到c站,由于b站活跃比较频繁,session一直都在,而a站的缓存时间极有可能已经过期了,此时从b站跳转到c站,c站跳转到a站去判断登陆,结果发现已经失效了,还是得登陆。所以这是有问题的,由于我们业务模块相关性差,不会随意跳转,所以暂不考虑这样的问题。但这确实是我的一个问题。我没想清楚。

有关SSO单点登录的PHP实现方法(Laravel框架),小编就给大家介绍这么多,希望对大家有所帮助!

PHP 相关文章推荐
PHP获取文件绝对路径的代码(上一级目录)
May 29 PHP
PHP新手NOTICE错误常见解决方法
Dec 07 PHP
PHP常用技巧总结(附函数代码)
Feb 04 PHP
for循环连续求和、九九乘法表代码
Feb 20 PHP
分享五个PHP7性能优化提升技巧
Dec 07 PHP
php实现倒计时效果
Dec 19 PHP
Zend Framework实现多服务器共享SESSION数据的方法
Mar 22 PHP
php自定义函数实现汉字转换utf8编码的方法
Sep 29 PHP
PHP中call_user_func_array回调函数的用法示例
Nov 26 PHP
php连接微软MSSQL(sql server)完全攻略
Nov 27 PHP
php 生成加密公钥加密私钥实例详解
Jun 16 PHP
PHP addslashes()函数讲解
Feb 03 PHP
Zend Framework开发入门经典教程
Mar 23 #PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
Mar 23 #PHP
Zend Framework教程之Zend_Config_Ini用法分析
Mar 23 #PHP
PHP正则获取页面所有图片地址
Mar 23 #PHP
Zend Framework教程之Zend_Config_Xml用法分析
Mar 23 #PHP
php获取文件后缀的9种方法
Mar 22 #PHP
Zend Framework教程之Zend_Registry对象用法分析
Mar 22 #PHP
You might like
PHP加密函数 Javascript/Js 解密函数
2013/09/23 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
这段js代码得节约你多少时间
2011/12/20 Javascript
js 浏览器事件介绍
2012/03/30 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
js 时间格式与时间戳的相互转换示例代码
2013/12/25 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
详解Bootstrap插件
2016/04/25 Javascript
BootStrap tooltip提示框使用小结
2016/10/26 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
Python读取图片属性信息的实现方法
2016/09/11 Python
scrapy爬虫实例分享
2017/12/28 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
python如何爬取个性签名
2018/06/19 Python
python 调用有道api接口的方法
2019/01/03 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
Python class的继承方法代码实例
2020/02/14 Python
详解python logging日志传输
2020/07/01 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
如何在发生故障的节点上重新安装 SQL Server
2013/03/14 面试题
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
大专毕业生自我鉴定
2013/11/21 职场文书
高二美术教学反思
2014/01/14 职场文书
八年级生物教学反思
2014/01/22 职场文书
毕业生求职信
2014/06/10 职场文书
股东授权委托书范本
2014/09/13 职场文书
餐厅服务员岗位职责
2015/02/09 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书