一、什么是单点登录SSO(Single Sign-On)
SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。
二、单点登录解决了什么问题
解决了用户只需要登录一次就可以访问所有相互信任的应用系统,而不用重复登录。
当用户第一次访问应用系统的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份校验,如果通过校验,应该返回给用户一个认证的凭据--ticket;用户再访问别的应用的时候,就会将这个ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进行校验,检查ticket的合法性。如果通过校验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。
要实现SSO,需要以下主要的功能:
-
所有应用系统共享一个身份认证系统。
统一的认证系统是SSO的前提之一。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对ticket进行效验,判断其有效性。 -
所有应用系统能够识别和提取ticket信息
要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对ticket进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。
三种:
1.www.a.com/a.php www.a.com/b.php 同一域名下的登录状态检测很简单,分两种状态,1.http链接持续,此时根据session中放置的用户id判定即可。2.http链接断开之后再打开,此时回话session新建,之前的session信息失效,这时候如果在约定时间内需要保持登录状态的话,就需要设定cookie(加密的tooken信息),发送请求时候,解析出对应的用户唯一标示,如果判定ok,则设置期对应的session信息,更新用户的登录状态为已登录。
2.site1.a.com/a.php site2.a.com/b.php 不同二级域名下。首先session可以共享,cookie可以共享,请将他们的cookie和session的origin设置都为根域名,然后逻辑同1。否则,如果session共享了,而cookie并没有共享,那,此时我使用的方法是sso登录,将oauth验证地址设置在site1.a.com服务器,不管是在哪台机器,需要认证的页面都需要跳转到此服务器进行认证,如果已经有了对应的tooken信息,则更新共享session中的用户id,设置其登录态为已登录。
3.site1.a.com/a.php site2.b.com/b.php 暂时没想好怎么设计。
浙公网安备 33010602011771号