使用PHP怎么实现一个SSO单点登录功能-创新互联

这期内容当中小编将会给大家带来有关使用PHP怎么实现一个SSO单点登录功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

我们提供的服务有:网站建设、网站设计、微信公众号开发、网站优化、网站认证、庐阳ssl等。为上1000家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的庐阳网站制作公司

假如三个站点 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);
}

上述就是小编为大家分享的使用PHP怎么实现一个SSO单点登录功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


当前标题:使用PHP怎么实现一个SSO单点登录功能-创新互联
地址分享:http://abwzjs.com/article/disooj.html