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自动适应范围的分页代码
Aug 05 PHP
破解图片防盗链的代码(asp/php)测试通过
Jul 02 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
Feb 03 PHP
在PHP中设置、使用、删除Cookie的解决方法
May 06 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
Aug 22 PHP
php查询相似度最高的字符串的方法
Mar 12 PHP
php实现用已经过去多长时间的方式显示时间
Jun 05 PHP
php通过两层过滤获取留言内容的方法
Jul 11 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 PHP
Laravel事件监听器用法实例分析
Mar 12 PHP
浅析PHP7 的垃圾回收机制
Sep 06 PHP
php提供实现反射的方法和实例代码
Sep 17 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实现搜索相似图片
2015/09/22 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
JS保留两位小数,多位小数的示例代码
2014/01/07 Javascript
再探JavaScript作用域
2014/09/24 Javascript
如何防止JavaScript自动插入分号
2015/11/05 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
JavaScript随机生成颜色的方法
2016/10/15 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
Iscrool下拉刷新功能实现方法(推荐)
2017/06/26 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
python中使用urllib2伪造HTTP报头的2个方法
2014/07/07 Python
python的keyword模块用法实例分析
2015/06/30 Python
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
python 判断网络连通的实现方法
2018/04/22 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
python画环形图的方法
2020/03/25 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
HTML5中Canvas与SVG的画图原理比较
2013/01/16 HTML / CSS
HTML5仿微信聊天界面、微信朋友圈实例代码
2018/01/29 HTML / CSS
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
日化店促销方案
2014/03/26 职场文书
效能监察建议书
2014/05/19 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
英语系本科生求职信
2014/07/15 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
关于运动会的宣传稿
2015/07/23 职场文书