为何AWS Cognito配置idToken有效期5分钟实际1天过期?
Cognito客户端配置界面截图
实际生成Cookie过期时间截图
这个问题是Cognito配置分层导致的常见坑,你在应用客户端板块设置的令牌有效期,不会自动覆盖Cognito其他模块的默认1天有效期,按以下步骤排查修复即可:
根因说明
Cognito的认证有效期配置是分模块独立生效的,没有全局联动:
- 应用客户端页配置的访问令牌、ID令牌、刷新令牌有效期,仅对直接调用SDK发起令牌请求、不经过Cognito托管UI的场景生效
- Cognito托管认证流程生成的会话Cookie,默认读取用户池全局的「应用程序会话持续时间」配置,这个参数的系统默认值就是1天,优先级高于单客户端的令牌配置
- 如果React端用Amplify Auth做认证逻辑,Amplify内置的Cookie存储模块默认有效期也是1天,若不显式配置会直接覆盖Cognito返回的令牌有效期
修复步骤
- 先改用户池全局会话时长
进入对应Cognito用户池控制台,打开「安全」→「托管UI」配置页(部分版本控制台入口在「用户池属性」的安全配置分组下),找到「应用程序会话持续时间」选项,将默认的1天调整为你需要的时长,这个参数最大支持设置14天,修改后保存等待配置生效即可。 - 对齐应用客户端的令牌参数
回到对应应用客户端的配置页,确认ID令牌、访问令牌的有效期不超过上一步设置的全局会话时长。注意刷新令牌最长可设为365天,但全局会话过期后,未过期的刷新令牌也无法完成续期,不要把刷新令牌的有效期当成会话有效期。 - 显式配置Amplify的Cookie存储参数(使用Amplify的场景必做)
不要依赖Amplify的默认Cookie配置,在React项目的Amplify初始化代码中显式指定过期时间,和Cognito侧配置保持一致:import { Amplify } from 'aws-amplify'; Amplify.configure({ Auth: { region: '你的Cognito所在区域', userPoolId: '你的用户池ID', userPoolWebClientId: '你的应用客户端ID', cookieStorage: { domain: window.location.hostname, path: '/', expires: 14, // 单位:天,和Cognito全局会话时长对齐 secure: process.env.NODE_ENV === 'production', sameSite: 'strict' } } }); - 验证配置
清理浏览器当前域名下所有Cognito相关的历史Cookie,退出登录后重新走一遍认证流程,再检查Cookie的过期时间即可。
补充说明:如果开启了第三方社交登录(Google、Facebook、企业SAML IdP等),需要额外确认第三方身份源的会话有效期,最终Cookie有效期会取Cognito配置和第三方IdP配置中的更短值。
内容的提问来源于stack exchange,提问作者ambigus9
相关产品推荐
相关产品推荐

