《PHP学习:SSO单点登录的PHP实现方法(Laravel框架)》要点:
本文介绍了PHP学习:SSO单点登录的PHP实现方法(Laravel框架),希望对您有用。如果有疑问,可以联系我们。
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中摆脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力.PHP学习
简单说一下我的逻辑,我也不知道我理解sso对不对.
PHP学习
假如三个站点 a.baidu.com b.baidu.com c.baidu.com
PHP学习
a.baidu.com 作为验证用户登录账户.PHP学习
b和c作为客户端(子系统).
PHP学习
b和c需要登录的时候跳转到a,并且携带参数source指明登陆后跳转的链接.
PHP学习
a站点就是普通的登陆方式(校验用户密码),校验成功后做一些处理.需要生成一个ticket,具体怎么生成都可以,只要平安就可以了.然后存储到Cache里面.这里有疑问,后面总结.登陆成功后直接跳转到\(url就可以了.PHP学习
``` 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```)
PHP学习
b站做一个全局的过滤器,接受这个ticket然后哀求a站验证ticket是否为a生成的.
PHP学习
b站过滤器App\Http\Middleware\CasAuthenticate代码,这里判断是否有ticket并发送哀求到a站校验.如果是登陆的,则拿到用户UID进行登陆.
PHP学习
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); }
逻辑算是完成了,但是有几个疑问.
PHP学习
1.我这个实现,我自己都不知道是不是对的,这是我根据原理写出来的.
PHP学习
2.假如b站现在跳转到c站,由于b站活跃比较频繁,session一直都在,而a站的缓存时间极有可能已经过期了,此时从b站跳转到c站,c站跳转到a站去判断登陆,结果发现已经失效了,还是得登陆.所以这是有问题的,由于我们业务模块相关性差,不会随意跳转,所以暂不考虑这样的问题.但这确实是我的一个问题.我没想清楚.PHP学习
有关SSO单点登录的PHP实现办法(Laravel框架),小编就给大家介绍这么多,希望对大家有所帮助!PHP学习
《PHP学习:SSO单点登录的PHP实现方法(Laravel框架)》是否对您有启发,欢迎查看更多与《PHP学习:SSO单点登录的PHP实现方法(Laravel框架)》相关教程,学精学透。维易PHP学院为您提供精彩教程。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/7256.html