首頁 >後端開發 >php教程 >单点登录(SSO)如何实现?

单点登录(SSO)如何实现?

WBOY
WBOY原創
2016-06-06 20:19:471454瀏覽

现在有子系统
A,B
现在想要将其登录打通
有两种方案
1 session共享
这个方案效率太低,极高耦合度,仅仅适用于单子系统内部使用
2 使用统一授信服务器S
比如有一个每一个系统都需要的统一的ope id,子系统发现没有openid或者openid不对时重定向到授信服务器S进行登录,S提供一个openid到cookie,让各个子系统访问。
子系统访问有两种方案(我认为)
主动式:每一次用户访问时向S检测openid是否正确(就像单系统登录向本地session查询一样)。但是问题就是这种方案太慢,每一次都需要向S查询一下。另外可以缓存一下信息到本地,但是这样就没有办法同步登出了。。QAQ
被动式:S在登录后,给每个系统 用户已登录 的消息,登出后给每个系统 用户已登出 的消息。但是,这样耦合度太高,另外如果服务器太多,岂不是崩了。。
该如何权衡?
我希望能够主动式,然后缓存,登出时清楚openid,也就是说,子系统无法判断缓存,用户对应关系而实现登出,这样是否有风险?
另外不知道自己理解的openid是不是这个意思,欢迎拍砖。。
另外我的步骤中少需要考虑的东西吗?
大家有什么好建议吗?
啊,大脑好乱。。

回复内容:

现在有子系统
A,B
现在想要将其登录打通
有两种方案
1 session共享
这个方案效率太低,极高耦合度,仅仅适用于单子系统内部使用
2 使用统一授信服务器S
比如有一个每一个系统都需要的统一的ope id,子系统发现没有openid或者openid不对时重定向到授信服务器S进行登录,S提供一个openid到cookie,让各个子系统访问。
子系统访问有两种方案(我认为)
主动式:每一次用户访问时向S检测openid是否正确(就像单系统登录向本地session查询一样)。但是问题就是这种方案太慢,每一次都需要向S查询一下。另外可以缓存一下信息到本地,但是这样就没有办法同步登出了。。QAQ
被动式:S在登录后,给每个系统 用户已登录 的消息,登出后给每个系统 用户已登出 的消息。但是,这样耦合度太高,另外如果服务器太多,岂不是崩了。。
该如何权衡?
我希望能够主动式,然后缓存,登出时清楚openid,也就是说,子系统无法判断缓存,用户对应关系而实现登出,这样是否有风险?
另外不知道自己理解的openid是不是这个意思,欢迎拍砖。。
另外我的步骤中少需要考虑的东西吗?
大家有什么好建议吗?
啊,大脑好乱。。

单点登录一般不采用OpenId的概念,OpenId一般是外部验证才采用的。单点登录一般从登录系统登录并在登录系统域写身份 cookie 后,会跳转到其他系统的一个回调地址,带上 Ticket 参数,Ticket 是带有有限期的验证串,其他系统获得 Ticket 后从后台向登录系统验证 Ticket ,如果成功,则写入当前域的 cookie 和其他的身份信息。

关于登录后验证(主要是登出检查)这块,大多是有单点登录的网站采用的是你的第二种思路,也就是向所有系统发出登出信号,这个可以在登出后在用户端用 ajax 静默调用,一次调用多个也不会产生较大的影响。

谢谢关注,已经找到方法了,教程如下:
http://www.imooc.com/wap/article?article_id=3558

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn