Skip to content

单点登录的两种实现方式

概念

单点登录(Single Sign-On,SSO)是一种身份验证机制,允许用户使用一个账户登录多个系统,而不需要为每个系统创建单独的账户。

实现方式

认证中心模式

认证中心模式是单点登录模式的一种实现方式,其原理是:

  1. 用户访问系统A时,如果未登录,则重定向到认证中心;
  2. 用户在认证中心登录,认证中心会生成一个令牌,并返回给用户,相应的登录状态也会存在数据库中;
  3. 然后用户在后续访问系统A、系统B、系统C时,会携带上这个令牌,然后各系统会使用这个令牌请求认证中心进行验证。
  4. 认证中心会使用这个令牌查询数据库,并将登录状态返回给各系统。
  5. 各系统会根据认证中心返回的登录状态,决定是否需要跳转到认证中心登录页。
mermaid
sequenceDiagram
autoNumber

  participant U as 用户
  participant S as 各系统
  participant Auth as 认证中心

  U ->>+ S: 访问系统
  S ->>- U: 重定向到认证中心
  U ->>+ Auth: 登录
  Auth ->>- U: 返回令牌
  U ->>+ S: 携带令牌访问各系统
  S ->>+ Auth: 携带令牌请求认证中心
  Auth ->>- S: 返回登录状态
  alt 登录状态正常
  S ->> U: 正常访问
  else 登录状态异常
  S ->>- U: 重定向到认证中心登录页
end

优点:

  • 可以对用户的登录状态进行实时管理,当在用户登录状态发生改变时,各系统能实时做出反应;

缺点:

  • 认证中心需要处理大量来自各系统的请求,对性能要求较高;

双token模式

双token模式是单点登录模式的一种实现方式,其原理是:

  1. 用户访问系统A时,如果未登录,则重定向到认证中心;
  2. 用户在认证中心登录,认证中心会生成一个长时效令牌和一个短时效令牌,并返回给用户,相应的登录状态也会存在数据库中;
  3. 然后用户在后续访问系统A、系统B、系统C时,会携带上短时效令牌;
  4. 然后各系统会在自己本地对这个令牌进行解密,并验证令牌是否有效;
  5. 如果令牌有效,则各系统会认为用户已登录,让用户正常访问。
  6. 如果令牌无效,则各系统会认为用户未登录,让用户重定向到认证中心登录页。
  7. 由于短时效令牌的时效性较短,所以前端会每隔一段时间,会使用长时效令牌主动请求认证中心,获取最新的短时效令牌。
  8. 认证中心会使用长时效令牌查询数据库,确定还处于登录状态,则更新短时效令牌,并返回给前端。
  9. 如果长时效令牌无效,则认为用户已退出登录,让用户重定向到认证中心登录页。
  10. 同时,为了保证各系统能正常解密短时效令牌,认证中心会将解密秘钥同步给各系统。
mermaid
sequenceDiagram
autoNumber

participant U as 用户
participant S as 各系统
participant Auth as 认证中心

U ->>+ S: 访问系统
S ->>- U: 重定向到认证中心
U ->>+ Auth: 登录
Auth ->>- U: 返回长时效令牌和短时效令牌
Auth ->> S: 同步解密秘钥
U ->>+ S: 携带短时效令牌访问各系统
S ->> S: 解密短时效令牌,获取登录状态
alt 登录状态正常
S ->> U: 正常访问
else 登录状态异常
S ->>- U: 重定向到认证中心登录页
end


Note over U: 短时效令牌过期

U ->>+ Auth: 使用长时效令牌请求认证中心
Auth ->>- U: 返回短时效令牌
U ->> S: 携带短时效令牌访问各系统……

优点:

  • 认证中心只需要处理少量的请求,对性能要求较低;

缺点:

  • 对登录状态的控制能力较差,需要等待短时效令牌过期后,才能让用户退出登录;