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

AWS Cognito通过Google认证后如何获取refresh token并维持用户认证?

解决方案:通过Google身份提供商获取Cognito Refresh Token并维持用户认证

你遇到的核心问题是当前使用的隐式授权流(Implicit Flow)不会返回refresh token,只要切换为授权码流(Authorization Code Flow),就能让Cognito在Google认证后生成并返回refresh token,从而实现长期维持用户认证。

1. 修改登录请求参数

将你当前的登录URL从隐式流改为授权码流,关键参数调整如下:

https://{DOMAIN_NAME}.auth.{REGION}.amazoncognito.com/login?response_type=code&client_id={CLIENT_ID}&redirect_uri=http://localhost:5000/&scope=openid+profile+email
  • 把response_type=token替换为response_type=code
  • 必须添加scope参数,至少包含openid,额外可按需添加profile、email获取用户基础信息

2. 配置Cognito用户池客户端

确保你的用户池客户端满足以下配置:

  • 在Cognito控制台的用户池客户端设置中,勾选允许授权码流
  • 确认生成refresh token选项已启用(默认启用,建议检查)
  • 验证http://localhost:5000/已添加到客户端的「允许回调URL」列表中

3. 用授权码换取完整令牌集

用户通过Google认证后,Cognito会将授权码(code)重定向到你的回调地址。后端需要用这个授权码向Cognito令牌端点发起POST请求,换取包含refresh token的完整令牌:

POST https://{DOMAIN_NAME}.auth.{REGION}.amazoncognito.com/oauth2/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&client_id={CLIENT_ID}&code={AUTHORIZATION_CODE}&redirect_uri=http://localhost:5000/

如果你的用户池客户端设置了密钥,需额外添加client_secret={CLIENT_SECRET}参数

4. 维持用户认证的流程

拿到refresh token后,后续的令牌刷新逻辑和普通Cognito用户完全一致:

  • 当id token或access token过期时,用refresh token向Cognito请求新令牌:
POST https://{DOMAIN_NAME}.auth.{REGION}.amazoncognito.com/oauth2/token
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&client_id={CLIENT_ID}&refresh_token={REFRESH_TOKEN}
  • 注意:refresh token默认有效期为30天,过期后需要用户重新登录

额外说明

  • 隐式授权流适合纯前端无后端的场景,但安全性较低且无refresh token支持;授权码流更适合有后端的应用,安全性更高且支持长期认证维持
  • 确保Google作为身份提供商在Cognito中的配置正确,已完成OpenID Connect的客户端ID、密钥等信息配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:45:34