- 作者:老汪软件技巧
- 发表时间:2024-09-16 17:02
- 浏览量:
单点登录 SSO ( Single Sign-On ) 的效果是“一处登录,多处登录”,用于内部多个系统共用一套登录系统。
举个例子,你在淘宝登录,然后进入天猫,会发现也处于登录状态。
SSO 是一种效果,即“一处登录,多处登录”,但它并不包含具体实现,业界的实现方案有 CAS、OAuth、OICD 等。
从前端视角来看,SSO 通常有一个认证中心,专门管理用户认证和授权,所谓单点,指的就是认证中心。
具体如何管理?模式有两种,Session 模式和Token 模式。
Session 模式
Session ( 会话 ) 模式就是认证中心用一张表格管理所有登录的用户,Session ID 就是表格中表示已登录用户的唯一 ID。
简单介绍一下上图的主要过程:
客户端提交账号密码到认证中心;认证中心验证账号密码后,在 Session 表中添加一项,表示已登录;客户端凭 Session ID 请求资源;服务器请求验证 Session,认证中心查表判断 Session 是否有效;验证通过后,返回资源。
用户持续一段时间 ( 比如 20 分钟 ) 不访问,只需将 Session ID 从表中删除,即可结束会话。
Session 模式将所有用户集中在一张表中,好处是方便管理,但这种模式也有几个问题:
为减轻认证中心的负担,人们提出了 Token 模式。
Token 模式
token 模式的关键在于,认证中心颁发登录凭证,各子系统自行验证凭证。
从上图可以看出,用户提交账号密码后,认证中心只返回一个 token,它通常是 JWT 格式,客户端凭 token 访问服务器资源。
创建和验证 token 都需要一个密钥,认证中心只需将密钥分发到各子系统,子系统即可自行认证 token 是否有效。
关于 JWT 可阅读文章 什么是 JWT
这种模式减轻了认证中心的压力,但也大大降低了对用户的管理能力。比如认证中心想阻止某用户登录,它需要向所有子系统广播这条消息,否则只能等用户手上的 token 过期。
双 token 可以解决这个问题。
双 token 模式
用户登录后,认证中心返回两个 token。
短期 token 过期时间短,比如 20 分钟过期,用来访问服务器资源;刷新 token 过期时间长,用来申请新的短期 token;短期 token 过期,则用刷新 token 申请新的;若刷新 token 也过期,则需重新登录。
这种做法的关键在于,让客户端每过一小段时间,就来认证中心续期,认证中心可以决定是否颁发新的 token,从而提高认证中心的管理能力。