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

AWS Cognito刷新令牌的正确用法及凭证失效问题咨询

解决Cognito身份池凭证失效问题 & Refresh Token使用指南

嘿,我刚好之前处理过类似的Cognito凭证刷新问题,结合实际经验给你梳理下解决方案:

首先你遇到的凭证失效问题,本质是ID Token有有效期(默认1小时),当ID Token过期后,身份池基于它生成的CognitoAWSCredentials也会失效,这时候就需要用你拿到的Refresh Token去刷新令牌,再重新获取有效凭证。

一、用Refresh Token刷新ID/Access Token

你需要调用Cognito User Pool的/oauth2/token端点,传入Refresh Token来获取新的令牌。请求参数和格式如下:

请求示例(HTTP POST)

POST /oauth2/token HTTP/1.1
Host: cognito-idp.<region>.amazonaws.com/<UserPoolId>
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&client_id=你的用户池客户端ID&refresh_token=你保存的REFRESH_TOKEN

注意:如果你的用户池客户端设置了Client secret,需要在请求里额外加上&client_secret=你的客户端Secret

这个请求会返回新的id_token、access_token,部分场景下还会返回新的refresh_token(取决于你用户池的滚动刷新设置,建议每次刷新后都保存最新的Refresh Token)。

二、更新身份池凭证

拿到新的ID Token后,你需要更新CognitoAWSCredentials的登录信息,或者直接重新初始化凭证实例(更稳妥):

C#代码示例

// 假设你已经获取到新的newIdToken
// 方式1:更新现有凭证的登录信息
credentials.ClearLogins();
credentials.AddLogin("cognito-idp.<region>.amazonaws.com/<UserPoolId>", newIdToken);

// 方式2:重新创建凭证实例(推荐,避免旧状态干扰)
var updatedCredentials = new CognitoAWSCredentials(你的IdentityPoolId, 区域);
updatedCredentials.AddLogin("cognito-idp.<region>.amazonaws.com/<UserPoolId>", newIdToken);

// 之后用updatedCredentials来初始化AWS客户端,比如S3、DynamoDB等
var s3Client = new AmazonS3Client(updatedCredentials, 区域);

三、最佳实践:主动处理凭证过期

为了避免调用AWS服务时突然抛出异常,建议做这两件事:

  • 监听凭证刷新事件:CognitoAWSCredentials提供了OnRefresh事件(不同SDK可能命名略有差异),可以在凭证即将过期前主动触发令牌刷新流程
  • 捕获异常并重试:当调用AWS客户端方法时遇到UnauthorizedAccessException或凭证过期相关异常,自动触发刷新令牌的逻辑,然后重试请求

四、关键注意事项

  • 确保你的用户池客户端允许使用Refresh Token:在用户池客户端设置里,必须勾选Allow refresh tokens选项,否则无法用Refresh Token刷新
  • Refresh Token的有效期:默认是30天,你可以在用户池客户端设置里调整,最长支持10年
  • 公开客户端(比如前端App)不要存储Client Secret:只有后端服务等保密客户端才需要使用Client Secret,避免泄露

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:09:35