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和ACCESS写聊天室(七)
Oct 09 PHP
PHP获取类中常量,属性,及方法列表的方法
Apr 09 PHP
Sorting Array Values in PHP(数组排序)
Sep 15 PHP
PHP获取用户的浏览器与操作系统信息的代码
Sep 04 PHP
php二维数组用键名分组相加实例函数
Nov 06 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
php生成随机数的三种方法
Sep 10 PHP
PHP中new static() 和 new self() 的区别介绍
Jan 09 PHP
php上传图片获取路径及给表单字段赋值的方法
Jan 23 PHP
php实现将base64格式图片保存在指定目录的方法
Oct 13 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
May 06 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/04/20 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
2020/02/10 PHP
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
js判断为空Null与字符串为空简写方法
2014/02/24 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
解决JS表单验证只有第一个IF起作用的问题
2018/12/04 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
Python脚本实现12306火车票查询系统
2016/09/30 Python
Python爬虫框架Scrapy实例代码
2018/03/04 Python
python 将json数据提取转化为txt的方法
2018/10/26 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
Python元组常见操作示例
2019/02/19 Python
python logging日志模块原理及操作解析
2019/10/12 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
python能自学吗
2020/06/18 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
最新的互联网创业计划书
2014/01/10 职场文书
环保倡议书400字
2014/05/15 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
学习保证书怎么写
2015/02/26 职场文书
2015年林业工作总结
2015/05/14 职场文书
践行三严三实心得体会(2016推荐篇)
2016/01/06 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书
go开发alertmanger实现钉钉报警
2021/07/16 Golang
利用python做数据拟合详情
2021/11/17 Python