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 相关文章推荐
ADODB类使用
Nov 25 PHP
php 采集书并合成txt格式的实现代码
Mar 01 PHP
php 图片上添加透明度渐变的效果
Jun 29 PHP
探讨fckeditor在Php中的配置详解
Jun 08 PHP
深入理解curl类,可用于模拟get,post和curl下载
Jun 08 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
Jun 19 PHP
php实现从上传文件创建缩略图的方法
Apr 02 PHP
php使用Session和文件统计在线人数
Jul 04 PHP
PHP使用socket发送HTTP请求的方法
Feb 14 PHP
微信支付开发发货通知实例
Jul 12 PHP
Yii2中使用asset压缩js,css文件的方法
Nov 24 PHP
php断点续传之文件分割合并详解
Dec 13 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 静态化实现代码
2009/03/20 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
用 javascript 实现的点击复制代码
2007/03/24 Javascript
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
javascript 年月日联动实现核心代码
2009/12/21 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
ASP.NET中AJAX 调用实例代码
2012/05/03 Javascript
js中将String转换为number以便比较
2014/07/08 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
JS实现仿QQ效果的三级竖向菜单
2015/09/25 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
微信小程序实现图片放大预览功能
2020/10/22 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
使用webpack搭建pixi.js开发环境
2020/02/12 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
Python转码问题的解决方法
2008/10/07 Python
Python lambda函数基本用法实例分析
2018/03/16 Python
Python中的CSV文件使用"with"语句的方式详解
2018/10/16 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
python读取图片任意范围区域
2019/01/23 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
Python浮点数四舍五入问题的分析与解决方法
2019/11/19 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
岗位职责范本
2013/11/23 职场文书
社区义诊活动总结
2014/04/30 职场文书
志愿者宣传口号
2014/06/17 职场文书
爱护草坪标语
2014/06/24 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
新闻稿格式范文
2015/07/18 职场文书
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL