SSO 的具体实战
一、概念
单点登录:Single Sign On,简称 SSO。用户只要登录一次,就可以访问所有相关信任应用的资源。企业里面用的会比较多,有很多内网平台,但是只要在一个系统登录就可以。
二、应用场景
应用场景大致分类如下:
企业内部系统集成: 在大型企业或组织中,通常存在多个内部系统,如人力资源管理系统、财务系统、客户关系管理系统等。使用单点登录可以使员工只需登录一次,即可访问所有系统,提高了工作效率。
跨域合作: 在跨组织或跨企业合作的场景下,各方可能拥有自己的系统和平台。通过单点登录,用户可以在不同的系统之间无缝切换,实现跨域合作的顺畅进行。
第三方应用集成: 许多企业的用户不仅需要访问内部系统,还需要使用第三方提供的服务,如邮件服务、在线文档服务等。SSO 可以使用户无需重复登录,直接访问第三方应用。
移动应用集成: 随着移动互联网的发展,许多企业都推出了移动端应用。通过单点登录,用户在使用移动应用时也可以享受到便捷的登录体验,无需重新输入用户名和密码。
安全控制与审计: SSO 可以提供集中式的身份验证和授权管理,有助于企业对用户的访问进行全面监控和审计,确保信息安全。
场景举例
淘宝、天猫都属于阿里旗下,当用户登录淘宝后,再打开天猫,系统便自动帮用户登录了天猫,这种现象就属于单点登录。
三、实现方式
实现原理: 单点登录是在用户登录一个业务系统时,先将登录信息发送至单独的 SSO 服务器进行认证,如果认证成功则向该应用程序或系统发送授权令牌,之后该用户就可以使用 授权令牌 完成登录并操作所有系统了。
实现方案
- 单一域名:可以把
cookie
种在根域名下实现单点登录。 - 多域名:常用
CAS
来解决,新增一个认证中心的服务。CAS(Central Authentication Service)是实现 SSO 单点登录的框架。
1)单一域名
将 Cookie 种在根域名下: 将登录认证后生成的 Cookie 种在根域名下,使得所有子域名都可以访问,从而实现单点登录。
优势:
- 实现简单,无需额外的中心认证服务。
- 维护成本低,不需要额外的服务器。
弊端:
安全性相对较低,一旦某个系统被攻破,所有系统都可能受到影响。
2)多域名
CAS 实现: CAS 是一个开源的单点登录协议,提供了认证、票据传输等功能,通过 CAS 可以在多个应用之间实现单点登录。
优势:
- 安全性高,用户的登录凭证不会在业务系统之间传递。
- 可扩展性强,支持多种身份认证方式和多种应用场景。
弊端:
- 实现和维护相对复杂,需要额外的认证中心服务。
- 需要额外的服务器资源用于维护认证中心。
CAS 认证时序图
3)操作流程
操作流程
1. 用户认证
- 用户首先访问一个系统,输入用户名和密码进行登录。
- 登录请求被发送到专门的认证中心(Authentication Server)。
- 认证中心验证用户的身份信息,如果验证成功,则生成一个安全令牌(如 JWT、Ticket 等)。
2. 令牌发放与传递
- 认证中心将令牌返回给用户首次登录的应用系统。
- 应用系统将令牌存储在用户的本地会话(如浏览器的 Cookie)中。
- 当用户访问其他需要 SSO 支持的应用系统时,浏览器会携带令牌自动发送给目标系统。
3. 令牌验证与授权
- 目标系统接收到请求后,发现携带了令牌,则将令牌发送给认证中心进行验证。
- 认证中心验证令牌的有效性(包括签名、有效期等)。
- 如果令牌有效,认证中心会返回一个确认信息给目标系统,证明用户已通过认证。
4. 资源共享与授权
- 目标系统接收到认证中心的确认后,允许用户访问系统资源,而无需再次登录。
- 目标系统可以依据令牌中的信息进行权限控制和角色映射。
5. 会话管理
- 为了保证安全性,一般会设置令牌的有效期,过了有效期后需要重新认证。
- 在某些实现中,当用户在一个子系统中注销时,会通知认证中心撤销所有关联令牌,从而实现全局注销,保证了其他系统也无法继续使用过期的认证信息。
4)相关流程图
A、SSO 应用核心设计
B、SSO 登录流程
C、SSO 注销流程
四、具体实例
TODO