场景
同一公司多个系统,每个系统都需要实现一遍登录校验功能。维护成本、同步成本和开发成本均高。
用户使用系统,也需要多次登录。
SSO(单点登录)就是为了解决多个系统登录授权的问题。它分为单点登录和单点注销。
介绍
单点登录:用户在子系统 a 登录后,在子系统 b、c 均不用重复登录。
单点注销:用户在子系统 a 注销/过期后,在子系统 b、c 均注销/过期。
整体设计
SSO 是一个独立的微服务,对外提供登录校验接口。
需要 DB 来存储会话令牌信息。
登录流程
登录流程如上图所示,注意点:
- 全局令牌用于 SSO 系统校验,局部令牌用于子系统身份校验(进一步控制资源访问等)
- 令牌设计可以是 JWT,但是 SSO 需要在 DB 中存储 JWT 是否有效的字段(原因见注销流程)
注销流程
注销过程如上,注意点:
- 注销需要在 SSO 系统中更新令牌的有效标识字段。如果采用 JWT,过期时间是写在令牌中,无法在过期前自由控制,所以要在 SSO 中心额外存储令牌字段来标记识别。