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 10 PHP
phpmailer发送gmail邮件实例详解
Jun 24 PHP
深入解析PHP中的(伪)多线程与多进程
Jul 01 PHP
php如何解决无法上传大于8M的文件问题
Mar 10 PHP
PHP中使用file_get_contents post数据代码例子
Feb 13 PHP
php上传文件并显示上传进度的方法
Mar 24 PHP
深入解析PHP的Yii框架中的event事件机制
Mar 17 PHP
浅析Yii2中GridView常见操作
Apr 22 PHP
PHPCMS2008广告模板SQL注入漏洞修复
Oct 11 PHP
PHP使用imagick扩展实现合并图像的方法
Apr 25 PHP
thinkPHP框架自动填充原理与用法分析
Apr 03 PHP
php使用fullcalendar日历插件详解
Mar 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编程与应用
2006/10/09 PHP
php生成N个不重复的随机数实例
2013/11/12 PHP
PHP函数microtime()用法与说明
2013/12/04 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
PHP使用CURL实现下载文件功能示例
2019/06/03 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
js最简单的拖拽效果实现代码
2010/09/24 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
jquery如何获取元素的滚动条高度等实现代码
2015/10/19 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
2017/03/07 Javascript
AngularJS自定义指令之复制指令实现方法
2017/05/18 Javascript
React中的refs的使用教程
2018/02/13 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
在Vue中获取自定义属性方法:data-id的实例
2020/09/09 Javascript
浅谈Python中的数据类型
2015/05/05 Python
python计算文本文件行数的方法
2015/07/06 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
Python使用re模块验证危险字符
2020/05/21 Python
容易被忽略的Python内置类型
2020/09/03 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
EJB timer的种类
2014/10/28 面试题
秋季开学典礼主持词
2014/03/19 职场文书
违反交通法规检讨书
2014/09/10 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
银行工作心得体会范文
2016/01/23 职场文书
《狮子和鹿》教学反思
2016/02/16 职场文书
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏