单点登录(SingleSignOn 即SSO)
单点登录(SingleSignOn 即SSO)
SSO英文全称Single SignOn,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。
实现原理
单点登录(Single Sign-On, SSO)的实现机制通常包括以下几个核心步骤和组件:
- 统一认证中心:
- 所有参与SSO体系的应用系统都依赖于一个统一的身份认证中心(Identity Provider, IDP)。用户在此处进行唯一的一次登录操作。
- 首次登录:
- 用户首次访问其中一个应用系统时,由于未登录,会被重定向至IDP进行身份验证。
- 用户提交用户名和密码等认证信息。
- IDP验证用户身份,如果验证成功,则生成一个唯一的、有时限的安全令牌(如Ticket、JWT Token等)。
- 令牌发放:
- IDP将此令牌(Token)发回给用户浏览器,并可能设置一个持久化的Cookie(如Ticket Granting Cookie, TGC),以便后续请求时携带。
- 用户浏览器收到Token后,将其附带在请求头或URL参数中,当访问其他支持SSO的应用系统(Service Providers, SP)时传递此Token。
- 票据验证:
- 当用户访问SP应用时,应用系统接收到Token并将其转发给IDP验证其有效性。
- IDP验证Token后,确认用户已通过认证,向SP发送确认信息或者生成新的、针对特定服务的服务票据(Service Ticket)。
- 权限授予:
- SP在接收到IDP的有效响应后,允许用户直接访问受保护资源,无需再次登录。
以下是几种常见的实现方式:
- 基于Cookie与Session共享:
- 使用共享会话存储(如集群内部的Session复制、分布式缓存如Redis存储Session信息)使得各个应用系统能识别同一用户的会话状态。
- 基于Token(例如JWT):
- 用户登录成功后,IDP发放JWT(JSON Web Tokens)或其他形式的Token,Token内包含用户身份信息且经过签名或加密保证安全,各应用系统只需验证Token即可确定用户身份。
- CAS协议:
- Central Authentication Service (CAS) 是一种流行的SSO协议,遵循标准的HTTP重定向流程来实现单点登录。