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日期时间函数的高级应用技巧
May 16 PHP
PHP自动选择 连接本地还是远程数据库
Dec 02 PHP
QQ登录 PHP OAuth示例代码
Jul 20 PHP
yii框架中的Url生产问题小结
Jan 16 PHP
深入php-fpm的两种进程管理模式详解
Jun 03 PHP
php使用百度翻译api示例分享
Jan 31 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
Apr 08 PHP
轻松掌握php设计模式之访问者模式
Sep 23 PHP
PHP基于DOM创建xml文档的方法示例
Feb 08 PHP
PHP程序员学习使用Swoole的理由
Jun 24 PHP
简单实用的PHP文本缓存类实例
Mar 22 PHP
php实现简单四则运算器
Nov 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 基础教程(四)
2006/10/09 PHP
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
php学习 函数 课件
2008/06/15 PHP
PHP超牛逼无限极分类生成树方法
2015/05/11 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
thinkphp jquery实现图片上传和预览效果
2020/07/22 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
Laravel 5.5 异常处理 & 错误日志的解决
2019/10/17 PHP
深入认识javascript中的eval函数
2009/11/02 Javascript
javascript奇异的arguments分析
2010/10/20 Javascript
juqery 学习之四 筛选查找
2010/11/30 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
js调用css属性写法
2013/09/21 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
JavaScript中的工厂函数(推荐)
2017/03/08 Javascript
Angular.JS中的this指向详解
2017/05/17 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
2017/10/25 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
结合Python的SimpleHTTPServer源码来解析socket通信
2016/06/27 Python
Python入门_条件控制(详解)
2017/05/16 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
2019/10/22 Python
Python lambda表达式原理及用法解析
2020/08/18 Python
电力公司个人求职信范文
2014/02/04 职场文书
家长对老师的评语
2014/04/18 职场文书
企业指导教师评语
2014/04/28 职场文书
优秀党员事迹材料
2014/12/18 职场文书
大学生学习十八届五中全会精神心得体会
2016/01/05 职场文书
Python3 类型标注支持操作
2021/06/02 Python