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 相关文章推荐
PHP5中新增stdClass 内部保留类
Jun 13 PHP
PHP-redis中文文档介绍
Feb 07 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
PHP图片处理之图片旋转和图片翻转实例
Nov 19 PHP
php微信开发之批量生成带参数的二维码
Jun 26 PHP
php中preg_replace_callback函数简单用法示例
Jul 21 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
Dec 23 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
Feb 04 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
Mar 28 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
Apr 20 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
Dec 31 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 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实现mysql数据库分表分段备份
2015/06/18 PHP
最新最全PHP生成制作验证码代码详解(推荐)
2016/06/12 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
推荐40款强大的 jQuery 导航插件和教程(上篇)
2012/09/14 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
2013/02/05 Javascript
jquery获取复选框被选中的值
2014/04/10 Javascript
JavaScript实现垂直向上无缝滚动特效代码
2016/11/23 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
2017/06/04 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
Node.js创建Web、TCP服务器
2017/12/05 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
vue自动化表单实例分析
2018/05/06 Javascript
Vue 莹石摄像头直播视频实例代码
2018/08/31 Javascript
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
Python中super函数的用法
2017/11/17 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
2020/07/20 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
python3的数据类型及数据类型转换实例详解
2019/08/20 Python
python防止随意修改类属性的实现方法
2019/08/21 Python
从numpy数组中取出满足条件的元素示例
2019/11/26 Python
Pytorch的mean和std调查实例
2020/01/02 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
html5实现微信打飞机游戏
2014/03/27 HTML / CSS
韩国流行时尚女装网站:Dintchina(中文)
2018/07/19 全球购物
eVitamins日本:在线购买折扣维生素、补品和草药
2019/04/04 全球购物
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
学雷锋活动倡议书
2014/08/30 职场文书
财务工作检讨书
2014/10/29 职场文书
教师节老师寄语
2015/05/28 职场文书
OpenCV-Python实现轮廓拟合
2021/06/08 Python
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers