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就可以了。
1
2
3
4
5
6
|
``` 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进行登陆。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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框架),小编就给大家介绍这么多,希望对大家有所帮助!
相关文章
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
- 64M VPS建站:能否支持高流量网站运行? 2025-06-10
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
2025-05-25 80
-
2025-05-24 19
-
2025-05-29 67
-
WebHostingPad支持哪些类型的数据库,如何创建和管理?
2025-06-04 56 -
2025-05-27 38