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 数组遍历的差异(array_diff 的实现)
Mar 23 PHP
php checkbox复选框值的获取与checkbox默认值输出方法
May 15 PHP
防止本地用户用fsockopen DDOS攻击对策
Nov 02 PHP
set_include_path和get_include_path使用及注意事项
Feb 02 PHP
codeigniter自带数据库类使用方法说明
Mar 25 PHP
php获取网页请求状态程序示例
Jun 17 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
Aug 06 PHP
PHP获取一个字符串中间一部分字符的方法
Aug 19 PHP
PHP生成唯一订单号的方法汇总
Apr 16 PHP
php发送html格式文本邮件的方法
Jun 10 PHP
PHP中的流(streams)浅析
Jul 02 PHP
Yii框架用户登录session丢失问题解决方法
Jan 07 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连接Oracle for NT 远程数据库
2006/10/09 PHP
php的字符串用法小结
2010/06/08 PHP
带密匙的php加密解密示例分享
2014/01/29 PHP
preg_match_all使用心得分享
2014/01/31 PHP
php多文件上传实现代码
2014/02/20 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
JavaScript面向对象之静态与非静态类
2010/02/03 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
javascript中方便增删改cookie的一个类
2012/10/11 Javascript
javascript中关于&& 和 || 表达式的小技巧分享
2015/04/10 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
简单学习vue指令directive
2016/11/03 Javascript
基于JavaScript中标识符的命名规则介绍
2018/01/06 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
Python进程间通信Queue实例解析
2018/01/25 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
在python tkinter中Canvas实现进度条显示的方法
2019/06/14 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
Django之模板层的实现代码
2019/09/09 Python
python中uuid模块实例浅析
2020/12/29 Python
有关HTML5 Video对象的ontimeupdate事件(Chrome上无效)的问题
2013/07/19 HTML / CSS
德国机车企业:FC-Moto
2017/10/27 全球购物
员工自我鉴定
2013/10/09 职场文书
体育教师个人的自我评价
2014/02/16 职场文书
财务总监管理岗位职责
2014/03/08 职场文书
初中新生军训方案
2014/05/13 职场文书
在职证明书范本(2014新版)
2014/09/25 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
写给同事的离职感言
2015/08/04 职场文书
高中优秀作文(范文)
2019/08/15 职场文书
Python中第三方库Faker的使用详解
2022/04/02 Python