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
Jun 29 PHP
php 生成饼图 三维饼图
Sep 28 PHP
php 各种应用乱码问题的解决方法
May 09 PHP
PHP sprintf() 函数的应用(定义和用法)
Jun 29 PHP
PHP实现设计模式中的抽象工厂模式详解
Oct 11 PHP
php简单获取目录列表的方法
Mar 24 PHP
PHP浮点数精度问题汇总
May 13 PHP
PHP 网站修改默认访问文件的nginx配置
May 27 PHP
PHP 实现从数据库导出到.csv文件方法
Jul 06 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
使用Git实现Laravel项目的自动化部署
Nov 24 PHP
实例化php类时传参的方法分析
Jun 05 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/03/05 PHP
PHP 读取文本文件内容并分页显示
2016/01/02 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
永不消失的title提示代码
2007/02/15 Javascript
十分钟打造AutoComplete自动完成效果代码
2009/12/26 Javascript
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
jQuery 如何先创建、再修改、后添加DOM元素
2014/05/20 Javascript
如何让一个json文件显示在表格里【实现代码】
2016/05/09 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
2018/09/19 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
python 性能提升的几种方法
2016/07/15 Python
简单谈谈Python中函数的可变参数
2016/09/02 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
Python多进程multiprocessing.Pool类详解
2018/04/27 Python
python Tkinter的图片刷新实例
2019/06/14 Python
django 通过URL访问上传的文件方法
2019/07/28 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
Python: 传递列表副本方式
2019/12/19 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
C#笔试题
2015/07/14 面试题
大学生自荐信
2013/12/11 职场文书
报到证丢失证明
2014/01/11 职场文书
工作求职自荐信
2014/06/13 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
简单介绍Python的第三方库yaml
2021/06/18 Python
MySQL数据管理操作示例讲解
2022/12/24 MySQL