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

AWS Cognito重定向回URL时无法找到RefreshToken的问题

解决Cognito托管登录页跳转后无法获取RefreshToken的问题

我之前也碰到过一模一样的情况,这其实是Cognito不同授权流程的设计差异导致的,咱们来拆解一下问题和解决办法:

问题本质

你通过aws cognito-idp admin-initiate-auth命令用ADMIN_NO_SRP_AUTH流程能拿到三种Token,是因为这个流程属于服务端到服务端的认证模式,Cognito会返回完整的身份凭证包。但你用托管登录页时指定的response_type=token走的是隐式授权流程——这个流程是专门给纯前端应用设计的,出于安全考量,本身就不会下发RefreshToken。

具体解决步骤

1. 切换授权流程类型

把登录URL里的response_type从token改成code,也就是采用授权码流程(Authorization Code Flow),修改后的URL示例:

https://test-cognito.auth.us-east-1.amazoncognito.com/login?response_type=code&client_id=你的客户端ID&redirect_uri=你的自定义重定向URL&scope=openid+profile+email

划重点:必须包含openid这个scope,这是Cognito返回RefreshToken的必要前提。

2. 检查应用客户端配置

登录AWS控制台,进入你的Cognito用户池 → 应用集成 → 应用客户端,确认以下设置:

  • 已勾选允许授权码流(Authorization Code Grant)
  • 在「生成的令牌」区域,确认RefreshToken的生成开关是开启状态(默认开启,但建议核实)
  • 你的自定义重定向URL已经添加到「已批准的重定向URI」列表中

3. 用授权码换取完整Token

用户完成登录后,Cognito会重定向到你的自定义URL,并携带code参数。你需要在后端用这个code调用Cognito的token端点来换取包含RefreshToken的完整凭证,示例命令:

curl --request POST \
  --url https://test-cognito.auth.us-east-1.amazoncognito.com/oauth2/token \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data grant_type=authorization_code \
  --data client_id=你的客户端ID \
  --data client_secret=你的客户端密钥(如果有设置的话) \
  --data code=重定向返回的授权码 \
  --data redirect_uri=你的自定义重定向URL

提示:如果你的应用客户端没有设置密钥,就不需要传client_secret参数。

额外建议

如果你的场景是纯前端应用,不想暴露客户端密钥,可以用**授权码流程+PKCE(Proof Key for Code Exchange)**的组合,这是更安全的前端方案,同样能获取到RefreshToken,而且不需要存储敏感的客户端密钥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:25:27