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 相关文章推荐
一个用mysql_odbc和php写的serach数据库程序
Oct 09 PHP
PHP的autoload机制的实现解析
Sep 15 PHP
CURL的学习和应用(附多线程实现)
Jun 03 PHP
解析:使用php mongodb扩展时 需要注意的事项
Jun 18 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
Jan 14 PHP
php curl_init函数用法
Jan 31 PHP
php实现图片文件与下载文件防盗链的方法
Nov 03 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
10个对初学者非常有用的PHP技巧
Apr 06 PHP
php表单加入Token防止重复提交的方法分析
Oct 10 PHP
thinkPHP5.0框架自动加载机制分析
Mar 18 PHP
Yii2框架加载css和js文件的方法分析
May 25 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.ini中的php-5.2.0配置指令详解
2008/03/27 PHP
php摘要生成函数(无乱码)
2012/02/04 PHP
解析thinkphp的左右值无限分类
2013/06/20 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
2014/05/08 PHP
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
2014/08/12 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
每天一篇javascript学习小结(面向对象编程)
2015/11/20 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
基于twbsPagination.js分页插件使用心得(分享)
2017/10/21 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
Vue2.0生命周期的理解
2018/08/20 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
2014/07/04 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
浅谈Python基础—判断和循环
2019/03/22 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
斯洛伐克家具和时尚装饰品购物网站:Butlers.sk
2019/09/08 全球购物
印尼购物网站:iLOTTE
2019/10/16 全球购物
如何实现jdbc性能优化
2012/07/30 面试题
上课讲话检讨书范文
2015/05/07 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
环保建议书作文300字
2015/09/14 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书
如何利用Python实现一个论文降重工具
2021/07/09 Python