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 20 PHP
phpMyAdmin2.11.6安装配置方法
Aug 24 PHP
php的字符串用法小结
Jun 08 PHP
joomla内置的表单验证功能使用方法
Jun 11 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
Jun 17 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
Nov 07 PHP
Laravel中Trait的用法实例详解
Mar 16 PHP
php上传图片类及用法示例
May 11 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
Jul 03 PHP
php实现网页上一页下一页翻页过程详解
Jun 28 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
May 02 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 出现乱码的解决方法
2008/08/08 PHP
php foreach 参数强制类型转换的问题
2010/12/10 PHP
PHP分多步骤填写发布信息的简单方法实例代码
2012/09/23 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
JavaScript关于提高网站性能的几点建议(一)
2016/07/24 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
微信小程序tabBar设置实例解析
2019/11/14 Javascript
nodejs制作小爬虫功能示例
2020/02/24 NodeJs
vue实现日历表格(element-ui)
2020/09/24 Javascript
[01:01:31]2018DOTA2亚洲邀请赛3月29日小组赛B组 Mineski VS paiN
2018/03/30 DOTA
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
pandas的qcut()方法详解
2019/07/06 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
解决Django中调用keras的模型出现的问题
2019/08/07 Python
python更新数据库中某个字段的数据(方法详解)
2020/11/18 Python
Pyqt助手安装PyQt5帮助文档过程图解
2020/11/20 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
2020/12/14 Python
Nike比利时官网:Nike.com (BE)
2019/02/07 全球购物
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
人力资源部培训专员岗位职责
2014/01/02 职场文书
男方父母证婚词
2014/01/12 职场文书
物理教学随笔感言
2014/02/22 职场文书
英文商务邀请函范文
2015/01/31 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript