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 相关文章推荐
mayfish 数据入库验证代码
Apr 30 PHP
PHP 面向对象 final类与final方法
May 05 PHP
php学习笔记之 函数声明
Jun 09 PHP
探讨:使用XMLSerialize 序列化与反序列化
Jun 08 PHP
codeigniter教程之多文件上传使用示例
Feb 11 PHP
PHP判断指定时间段的2个方法
Mar 14 PHP
基于PHP的简单采集数据入库程序【续篇】
Jul 30 PHP
PHP实现的简易版图片相似度比较
Jan 07 PHP
php判断访问IP的方法
Jun 19 PHP
php实现分页显示
Nov 03 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
Feb 07 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
May 09 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 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
PHP判断当前使用的是什么浏览器(推荐)
2019/10/27 PHP
javascript学习网址备忘
2007/05/29 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
2012/04/07 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
Vue.js实现大转盘抽奖总结及实现思路
2019/10/09 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
Python实现从URL地址提取文件名的方法
2015/05/15 Python
python 网络编程详解及简单实例
2017/04/25 Python
python flask 多对多表查询功能
2017/06/25 Python
python批量实现Word文件转换为PDF文件
2018/03/15 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
Django的models模型的具体使用
2019/07/15 Python
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
软件测试面试题
2015/10/21 面试题
机械专业毕业生推荐信范文
2013/11/25 职场文书
护士实习生自我鉴定范文
2013/12/10 职场文书
竞聘演讲稿
2014/04/24 职场文书
心理咨询承诺书
2014/05/20 职场文书
群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
个人收入证明格式
2015/06/24 职场文书
详细介绍Java中的CyclicBarrier
2022/04/13 Java/Android
box-shadow单边阴影的实现
2023/05/21 HTML / CSS