Home >Backend Development >PHP Tutorial >单点登录(SSO)如何实现?

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

WBOY
WBOYOriginal
2016-06-06 20:19:471455browse

现在有子系统
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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn