《深度解析单点登录(SSO):单点登录与SSO的关系及SSO实现原理》
一、单点登录与SSO的关系
单点登录(Single Sign - On,简称SSO),从概念上来说,单点登录就是一种身份验证机制,在多个相关但独立的软件系统中,用户只需进行一次登录操作,就可以访问所有相互信任的应用系统,严格意义上讲,单点登录就是SSO,这两个术语描述的是同一个概念。
二、SSO的实现原理
图片来源于网络,如有侵权联系删除
1、基于Cookie的SSO实现原理
用户首次登录
- 当用户登录到SSO系统中的一个应用(例如应用A)时,应用A会将用户的登录请求发送到认证服务器,认证服务器对用户进行身份验证,如验证用户名和密码等凭据,如果验证成功,认证服务器会创建一个包含用户身份信息(如用户ID等)的Cookie,并将这个Cookie发送回用户的浏览器,这个Cookie的作用域(domain)通常设置为顶级域名(example.com),这样它可以被同一顶级域名下的多个子应用共享。
- 应用A接收到包含用户身份信息的Cookie后,会识别用户已经登录,并允许用户访问该应用的资源。
访问其他应用
- 当用户想要访问同一SSO系统下的另一个应用(例如应用B)时,用户的浏览器会将之前认证服务器设置的Cookie发送给应用B,应用B收到请求后,会检查这个Cookie,发现其中包含有效的用户身份信息,于是就认为用户已经登录,无需再次要求用户输入用户名和密码,直接允许用户访问应用B的资源。
2、基于令牌(Token)的SSO实现原理
图片来源于网络,如有侵权联系删除
用户登录与令牌颁发
- 当用户登录到SSO系统中的某个应用时,认证服务器在验证用户身份后,会颁发一个令牌(Token)给用户,这个令牌是一个加密的字符串,其中包含用户的身份信息、有效期等数据,在基于JSON Web Token(JWT)的SSO实现中,JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),头部包含令牌的类型(如JWT)和加密算法(如HS256);载荷包含用户的身份标识、角色等信息;签名则是用于验证令牌的完整性和真实性。
- 应用接收到认证服务器颁发的令牌后,可以通过验证签名来确认令牌的有效性,并获取其中的用户身份信息,从而允许用户登录到该应用。
跨应用访问
- 当用户要访问其他应用时,用户将这个令牌提供给目标应用,目标应用会对令牌进行验证,如果验证通过,就可以根据令牌中的用户身份信息识别用户已经登录,进而允许用户访问其资源,这种基于令牌的方式具有更好的跨平台性,适用于不同类型的客户端(如Web应用、移动应用等)。
3、SSO中的身份认证与授权管理
- 在SSO系统中,身份认证是确定用户身份的过程,通常由认证服务器统一负责,认证服务器会维护用户的账号信息,如用户名、密码、用户属性等,并采用安全的加密算法对用户的登录凭据进行验证。
图片来源于网络,如有侵权联系删除
- 授权管理则是决定已认证用户能够访问哪些资源的过程,在SSO环境下,每个应用可能有自己的授权规则,一个企业内部的人力资源管理系统可能只允许具有特定角色(如人力资源专员)的用户访问员工薪资信息,当用户通过SSO登录到该系统时,系统会根据用户的角色信息(可能包含在Cookie或令牌中)进行授权检查,以确保用户只能访问其被授权的资源。
4、SSO系统与各个应用之间的信任关系建立
- 在SSO架构中,各个应用与SSO认证服务器之间需要建立信任关系,这种信任关系通常通过共享密钥或者数字证书等方式来实现。
- 在基于Cookie的SSO中,如果应用A和应用B都信任同一个认证服务器,它们会遵循认证服务器设定的Cookie规则,包括Cookie的加密方式、验证机制等,在基于令牌的SSO中,各个应用和认证服务器会共享用于验证令牌的密钥或者公钥(在使用非对称加密算法时),以确保令牌的有效性和安全性。
SSO通过统一的身份验证和授权管理,大大提高了用户体验,减少了用户在多个应用之间频繁登录的麻烦,同时也增强了系统的安全性和管理效率,尤其适用于企业内部多个业务系统集成或者大型互联网平台下多个子应用的整合场景。
评论列表