Skip to content

SSO 的具体实战

一、概念

单点登录:Single Sign On,简称 SSO。用户只要登录一次,就可以访问所有相关信任应用的资源。企业里面用的会比较多,有很多内网平台,但是只要在一个系统登录就可以。

二、应用场景

应用场景大致分类如下:

  1. 企业内部系统集成: 在大型企业或组织中,通常存在多个内部系统,如人力资源管理系统、财务系统、客户关系管理系统等。使用单点登录可以使员工只需登录一次,即可访问所有系统,提高了工作效率。

  2. 跨域合作: 在跨组织或跨企业合作的场景下,各方可能拥有自己的系统和平台。通过单点登录,用户可以在不同的系统之间无缝切换,实现跨域合作的顺畅进行。

  3. 第三方应用集成: 许多企业的用户不仅需要访问内部系统,还需要使用第三方提供的服务,如邮件服务、在线文档服务等。SSO 可以使用户无需重复登录,直接访问第三方应用。

  4. 移动应用集成: 随着移动互联网的发展,许多企业都推出了移动端应用。通过单点登录,用户在使用移动应用时也可以享受到便捷的登录体验,无需重新输入用户名和密码。

  5. 安全控制与审计: SSO 可以提供集中式的身份验证和授权管理,有助于企业对用户的访问进行全面监控和审计,确保信息安全。

场景举例

淘宝、天猫都属于阿里旗下,当用户登录淘宝后,再打开天猫,系统便自动帮用户登录了天猫,这种现象就属于单点登录。

三、实现方式

实现原理: 单点登录是在用户登录一个业务系统时,先将登录信息发送至单独的 SSO 服务器进行认证,如果认证成功则向该应用程序或系统发送授权令牌,之后该用户就可以使用 授权令牌 完成登录并操作所有系统了。

An image

实现方案

  • 单一域名:可以把 cookie 种在根域名下实现单点登录。
  • 多域名:常用 CAS 来解决,新增一个认证中心的服务。CAS(Central Authentication Service)是实现 SSO 单点登录的框架。

1)单一域名

将 Cookie 种在根域名下: 将登录认证后生成的 Cookie 种在根域名下,使得所有子域名都可以访问,从而实现单点登录。

优势:

  • 实现简单,无需额外的中心认证服务。
  • 维护成本低,不需要额外的服务器。

弊端:

安全性相对较低,一旦某个系统被攻破,所有系统都可能受到影响。

An image

2)多域名

CAS 实现: CAS 是一个开源的单点登录协议,提供了认证、票据传输等功能,通过 CAS 可以在多个应用之间实现单点登录。

优势:

  • 安全性高,用户的登录凭证不会在业务系统之间传递。
  • 可扩展性强,支持多种身份认证方式和多种应用场景。

弊端:

  • 实现和维护相对复杂,需要额外的认证中心服务。
  • 需要额外的服务器资源用于维护认证中心。

An image

CAS 认证时序图

An image

3)操作流程

操作流程

  • 1. 用户认证

    • 用户首先访问一个系统,输入用户名和密码进行登录。
    • 登录请求被发送到专门的认证中心(Authentication Server)。
    • 认证中心验证用户的身份信息,如果验证成功,则生成一个安全令牌(如 JWT、Ticket 等)。
  • 2. 令牌发放与传递

    • 认证中心将令牌返回给用户首次登录的应用系统。
    • 应用系统将令牌存储在用户的本地会话(如浏览器的 Cookie)中。
    • 当用户访问其他需要 SSO 支持的应用系统时,浏览器会携带令牌自动发送给目标系统。
  • 3. 令牌验证与授权

    • 目标系统接收到请求后,发现携带了令牌,则将令牌发送给认证中心进行验证。
    • 认证中心验证令牌的有效性(包括签名、有效期等)。
    • 如果令牌有效,认证中心会返回一个确认信息给目标系统,证明用户已通过认证。
  • 4. 资源共享与授权

    • 目标系统接收到认证中心的确认后,允许用户访问系统资源,而无需再次登录。
    • 目标系统可以依据令牌中的信息进行权限控制和角色映射。
  • 5. 会话管理

    • 为了保证安全性,一般会设置令牌的有效期,过了有效期后需要重新认证。
    • 在某些实现中,当用户在一个子系统中注销时,会通知认证中心撤销所有关联令牌,从而实现全局注销,保证了其他系统也无法继续使用过期的认证信息。

4)相关流程图

A、SSO 应用核心设计

An image

An image

B、SSO 登录流程

An image

C、SSO 注销流程

An image

四、具体实例

TODO