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

无UI M2M场景下获取AWS Cognito刷新令牌遇请求无效问题

问题分析与解决方案

为什么授权码流请求报错?

授权码流的/oauth2/token请求必须包含code和redirect_uri两个参数,你当前的请求缺少这两项,所以返回"Invalid request"错误。而且授权码流本质需要用户交互(通过/oauth2/authorize端点跳转登录页面获取授权码),完全不符合你无UI的M2M应用场景,这条路走不通。

无UI M2M场景获取刷新令牌的正确方案

对于无UI的机器对机器应用,若要获取刷新令牌,应该使用Resource Owner Password Credentials(ROPC)授权流,具体配置和请求步骤如下:

1. 调整用户池客户端配置

  • 在Cognito用户池客户端设置中,开启Resource Owner Password Credentials授权类型
  • 确保客户端的认证流程包含ALLOW_USER_PASSWORD_AUTH(直接由应用发起请求)或ALLOW_ADMIN_USER_PASSWORD_AUTH(通过Admin API发起)
  • 你已设置的ALLOW_REFRESH_TOKEN_AUTH保持不变,确保刷新令牌功能开启
  • 确认Allowed OAuth Scopes包含所需权限(比如openid)

2. 获取包含刷新令牌的Token请求

使用以下cURL调用/oauth2/token端点,直接传入用户凭证获取access_token、id_token和refresh_token:

curl \
-u "CLIENT_ID:CLIENT_SECRET" \
-d "grant_type=password" \
-d "username=你的用户名" \
-d "password=你的用户密码" \
-d "scope=openid" \
-X POST https://our-user-pool.auth.us-east-1.amazoncognito.com/oauth2/token

3. 使用刷新令牌获取新的Access Token

拿到refresh_token后,后续可以用它刷新令牌,无需再传入用户名密码:

curl \
-u "CLIENT_ID:CLIENT_SECRET" \
-d "grant_type=refresh_token" \
-d "refresh_token=你的刷新令牌" \
-X POST https://our-user-pool.auth.us-east-1.amazoncognito.com/oauth2/token

注意事项

  • ROPC流需要直接处理用户密码,存在一定安全风险,生产环境中若非必要,优先考虑客户端凭证流配合短期Access Token。
  • 确保用户池中的用户已启用密码认证,且凭证正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:52:19