PHP实现SSO单点登录

1492692055

前言:单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。

单点登录处处可见,例如在weibo.com登录过微博账号,然后你进入另一个系统blog.sina.com.cn是不需要再登录的,这就是SSO,一处登录处处可用。

长话短说,先来一个demo压压惊(这里只演示了三个系统),例如

system1 http://1.sso.xiaocp.com

system2 http://2.sso.xiaocp.com

system3 http://3.sso.xiaocp.com

这是三个系统,只要任意登录其中一个系统,其他另外两个则不需要再次登陆(账号密码随意填)

如何实现SSO
当然,大家没做过也听说过,实现sso单点登录一般都是使用统一登录接口,没错了,我这里也是采用统一登录接口http://login.sso.xiaocp.com/

我做的这个sso单点登录采用的是页面重定向的方式以及观察者模式(广播机制)

首先实现统一的登陆接口跟统一的退出接口,然后每个单点登陆系统都有回调监听登陆或者退出接口

SSO流程大概如下
用户请求,附带要重定向的url -> 统一登录接口 -> 通过验证,登陆成功 -> 广播通知每个系统的回调接口 -> 页面重定向 -> 重定向到指定url页面

设计缺陷:随着系统的增多效率会有所下降。