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的配置文件php.ini
Oct 09 PHP
给多个地址发邮件的类
Oct 09 PHP
用PHP和ACCESS写聊天室(七)
Oct 09 PHP
利用discuz实现PHP大文件上传应用实例代码
Nov 14 PHP
PHP分页显示制作详细讲解
Nov 19 PHP
Zend的Registry机制的使用说明
May 02 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
Apr 08 PHP
PHP多文件上传实例
Jul 09 PHP
PHP实现linux命令tail -f
Feb 22 PHP
CI框架无限级分类+递归的实现代码
Nov 01 PHP
PHP多个图片压缩成ZIP的方法
Aug 18 PHP
PHP终止脚本运行三种实现方法详解
Sep 01 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
E路文章系统PHP
2006/12/11 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
jquery 事件对象属性小结
2010/04/27 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
JS继承用法实例分析
2015/02/05 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
2016/06/07 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
vue插件实现v-model功能
2018/09/10 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
用js编写留言板
2020/03/17 Javascript
[01:20]DOTA2更新全新英雄 天涯墨客现已加入游戏
2018/08/25 DOTA
python字典排序实例详解
2015/05/20 Python
在Django的模型中执行原始SQL查询的方法
2015/07/21 Python
Python格式化日期时间操作示例
2018/06/28 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
献爱心捐款倡议书
2014/05/14 职场文书
信访工作经验交流材料
2014/05/23 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
2014年维修电工工作总结
2014/11/20 职场文书
酒会邀请函
2015/01/31 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
新闻稿标题
2015/07/18 职场文书
情况说明书怎么写
2015/10/08 职场文书
公安忠诚教育心得体会
2016/01/23 职场文书
教你如何用Python实现人脸识别(含源代码)
2021/06/23 Python
Python+pyaudio实现音频控制示例详解
2022/07/23 Python