You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Cognito Hosted UI重复生成授权码致旧令牌失效问题求助

解决AWS Cognito Hosted UI重复生成授权码及旧令牌失效问题

核心原因

Cognito Hosted UI默认每次触发授权流程时,会创建新的授权会话;若用户已有活跃会话,默认会终止旧会话(导致旧JWT令牌失效),这是默认的安全设计,但可通过配置调整。

解决方案

1. 添加prompt=none参数复用已有会话

在启动Hosted UI的授权请求里加上prompt=none参数,Cognito会先检查用户浏览器中是否有有效会话:

  • 若会话未过期,直接返回现有授权码(或按配置直接返回令牌),不会生成新码,旧令牌也不会失效;
  • 若会话过期或不存在,会返回login_required错误,此时再引导用户走正常登录流程。

示例授权请求URL片段:

https://<你的用户池域名>/oauth2/authorize?
response_type=code&
client_id=<你的客户端ID>&
redirect_uri=<你的回调地址>&
scope=openid&
prompt=none

2. 延长用户池客户端的会话有效期

登录AWS控制台,进入目标Cognito用户池,找到对应客户端,编辑应用客户端设置:

  • 调整「Session duration」(会话有效期),默认1小时,可根据业务需求延长至最长1天;
  • 会话有效期内重复触发Hosted UI,会直接复用现有会话,不会生成新授权码。

3. 禁用会话触发时的旧令牌撤销(可选)

如果业务允许旧令牌在新会话创建后仍生效,可修改客户端配置:

  • 在用户池客户端的「App client settings」中,取消勾选「Revoke tokens on logout」;
  • 注意:此设置会降低安全性,仅在业务明确需要时使用。

关键说明

授权码本身是一次性的(仅能兑换一次令牌),无法获取完全相同的授权码,但可通过复用会话避免发起新的授权流程,直接获取有效令牌(或复用本地存储的未过期令牌)。你的应用需自行存储JWT令牌(如浏览器localStorage或cookie),发起API请求前先检查令牌是否过期,未过期则直接使用,无需再次调用Hosted UI。

内容的提问来源于stack exchange,提问作者venkat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:31:02