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 相关文章推荐
Dedecms常用函数解析
Feb 01 PHP
PHP 截取字符串专题集合
Aug 19 PHP
PHP+JS+rsa数据加密传输实现代码
Mar 23 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
Dec 19 PHP
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
Sep 07 PHP
php cc攻击代码与防范方法
Oct 18 PHP
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
Jul 03 PHP
php简单统计中文个数的方法
Sep 30 PHP
Phpstorm+Xdebug断点调试PHP的方法
May 14 PHP
PHP根据key删除数组中指定的元素
Feb 28 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
Apr 16 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
May 08 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 版本]
2007/03/20 PHP
PHP 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
如何在HTML 中嵌入 PHP 代码
2015/05/13 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
PHP析构函数destruct与垃圾回收机制的讲解
2019/03/22 PHP
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
Mootools 1.2教程 输入过滤第一部分(数字)
2009/09/15 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
简略说明Javascript中的= =(等于)与= = =(全等于)区别
2013/04/16 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
2015/03/04 Javascript
jquery实现数字输入框
2017/02/22 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
Vue实现图片与文字混输效果
2019/12/04 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
uniapp与webview之间的相互传值的实现
2020/06/29 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
python自动安装pip
2014/04/24 Python
python 统计列表中不同元素的数量方法
2018/06/29 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
python中导入 train_test_split提示错误的解决
2020/06/19 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
材料化学应届生求职信
2013/10/09 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
接待员岗位责任制
2014/02/10 职场文书
网络工程师自荐书范文
2014/04/01 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
沈阳故宫导游词
2015/01/31 职场文书
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL
Python利用zhdate模块实现农历日期处理
2022/03/31 Python