> 백엔드 개발 > PHP 튜토리얼 > 单点登录(SSO)如何实现?

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

WBOY
풀어 주다: 2016-06-06 20:19:47
원래의
1457명이 탐색했습니다.

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿