授权服务器上的Session有什么作用?JWT场景下是否需存储?
会话相关问题解答
1. 引用语句的具体含义
你提到的"the next time the user arrives at the Authorization Server, they won't need to see a login page or be prompted to use MFA again."指的是:用户首次在授权服务器完成账号密码登录+MFA验证后,短时间内再次跳转至该授权服务器申请身份授权时,无需重复输入账号密码,也无需再次完成MFA校验,授权服务器会直接下发对应的授权凭证。
2. 用户无需再看到登录页的原因
用户首次完成认证后,授权服务器会向用户浏览器下发自身域名下的会话Cookie,Cookie中绑定了对应会话的唯一标识。当用户再次访问授权服务器域名时,浏览器会自动携带这个Cookie,授权服务器校验Cookie关联的会话处于有效状态,即可直接确认用户身份合法,无需再展示登录页要求用户重新校验身份。
3. 授权服务器上的Session承担的角色
- 存储用户认证状态:包括是否已登录、会话有效时长、已完成的安全校验等级(比如是否通过MFA、是否完成实人认证等)
- 关联用户基础身份属性:避免每次认证流程都重复查询用户数据库拉取身份信息
- 支撑会话管控能力:支持用户查看当前登录的所有设备、主动注销指定设备会话,也支持管理员主动踢出风险会话
4. 在授权服务器中存储会话的必要性
OAuth2/OIDC的核心架构中,授权服务器是统一身份入口,会对接多个不同的业务应用,统一存储会话可以实现:
- 单点登录(SSO):用户在任意一个关联应用完成登录后,跳转其他同租户下的应用时,无需重复走登录流程
- 统一安全策略管控:所有应用的登录校验规则、会话时效、风险拦截策略都可以在授权服务器统一配置,无需每个业务单独实现
- 全局生命周期管理:用户改密、主动注销、管理员踢下线等操作可以一次性生效到所有关联应用的会话,不需要逐个通知业务系统修改状态
5. JWT认证场景下服务端存储Session的价值
即使资源服务器可以本地验证JWT有效性,无需和授权服务器通信,服务端存储Session依然有不可替代的价值:
- JWT本身有不可撤销、有效期固定的缺陷,当用户需要刷新过期的JWT时,授权服务器可以先校验自身存储的会话是否有效,如果用户已经被踢下线、改密,会直接拒绝刷新请求,避免失效用户继续获取新的有效JWT
- 可实现全局单点登出:用户在任意一个应用点击登出,授权服务器销毁对应会话后,所有关联应用的后续令牌刷新请求都会被拒绝,实现全平台统一登出
- 可支撑安全风控校验:用户申请刷新JWT时,授权服务器可以比对当前请求的设备、IP与会话中存储的首次登录信息是否匹配,存在异常时可以触发二次校验,拦截风险请求
内容的提问来源于stack exchange,提问作者MrRobot9
相关产品推荐
相关产品推荐

