单点登录SSO: Signgle Sign On

场景

同一公司多个系统,每个系统都需要实现一遍登录校验功能。维护成本、同步成本和开发成本均高。

用户使用系统,也需要多次登录。

SSO(单点登录)就是为了解决多个系统登录授权的问题。它分为单点登录单点注销

介绍

单点登录:用户在子系统 a 登录后,在子系统 b、c 均不用重复登录。

单点注销:用户在子系统 a 注销/过期后,在子系统 b、c 均注销/过期。

整体设计

SSO 是一个独立的微服务,对外提供登录校验接口。

需要 DB 来存储会话令牌信息。

007S8ZIlgy1giyq4w0b5qj30jn0f4q4h.jpg

登录流程

007S8ZIlgy1giyq5ihdapj30kh0pvq5f.jpg

登录流程如上图所示,注意点:

  • 全局令牌用于 SSO 系统校验,局部令牌用于子系统身份校验(进一步控制资源访问等)
  • 令牌设计可以是 JWT,但是 SSO 需要在 DB 中存储 JWT 是否有效的字段(原因见注销流程)

注销流程

007S8ZIlgy1giyq8vw9l0j30je0dv3zu.jpg

注销过程如上,注意点:

  • 注销需要在 SSO 系统中更新令牌的有效标识字段。如果采用 JWT,过期时间是写在令牌中,无法在过期前自由控制,所以要在 SSO 中心额外存储令牌字段来标记识别。

参考链接