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

如何使用AWS CLI生成Cognito用户安全令牌以测试Lambda函数

嘿,我之前也碰到过这个棘手的问题,折腾了好一阵才理顺——你要的web-identity-token其实就是Cognito用户的ID Token(用Access Token也能行,但ID Token是更标准的选择),下面给你一步步拆解获取方法,还有后续生成凭证、在Postman测试的流程:

获取Cognito用户的Web Identity Token(ID Token)

方法1:用AWS CLI直接获取(最快捷)

如果你已经知道目标用户的账号密码,这是最快的方式:

  1. 先确认你的Cognito应用客户端开启了USER_PASSWORD_AUTH认证流——去AWS控制台的Cognito用户池→应用集成→应用客户端→编辑,找到“启用用户名密码认证”选项打开它。
  2. 运行下面的CLI命令,把占位符换成你的实际信息:
aws cognito-idp initiate-auth \
  --client-id 你的Cognito应用客户端ID \
  --auth-flow USER_PASSWORD_AUTH \
  --auth-parameters USERNAME=目标用户名,PASSWORD=目标用户密码
  1. 命令返回的结果里,AuthenticationResult下的IdToken就是你要的--web-identity-token值,直接复制就行。

方法2:通过Cognito托管UI获取(适合前端场景)

如果你的用户是通过前端托管UI登录的,也可以直接从登录回调里拿:

  • 构造托管UI的登录链接:https://你的用户池域名/login?client_id=你的应用客户端ID&response_type=token&scope=openid&redirect_uri=你的回调地址
  • 用目标用户账号登录后,浏览器地址栏的哈希片段里会有id_token,复制这个值就OK。

方法3:用Postman直接调用Cognito认证API

要是你习惯用Postman操作,也可以直接发请求拿token:

  • 请求URL:https://cognito-idp.你的AWS区域.amazonaws.com/
  • 请求头:
    • Content-Type: application/x-amz-json-1.1
    • X-Amz-Target: AWSCognitoIdentityProviderService.InitiateAuth
  • 请求体(JSON格式):
{
  "AuthParameters": {
    "USERNAME": "目标用户名",
    "PASSWORD": "目标用户密码"
  },
  "AuthFlow": "USER_PASSWORD_AUTH",
  "ClientId": "你的Cognito应用客户端ID"
}

发送请求后,响应里的IdToken就是你要的token。

生成临时凭证并在Postman中使用

拿到IdToken后,就可以运行你之前的STS命令了,把占位符替换成实际值:

aws sts assume-role-with-web-identity \
  --role-arn arn:aws:iam::1234567890:role/你的角色名 \
  --role-session-name "RoleSession1" \
  --web-identity-token 刚才拿到的IdToken \
  --provider-id cognito-idp.你的AWS区域.amazonaws.com/你的用户池ID

注意:--provider-id的格式必须是cognito-idp.<区域>.amazonaws.com/<用户池ID>,别写错了。

命令执行后,会返回Credentials字段,里面包含你需要的AccessKeyId、SecretAccessKey和SessionToken。在Postman测试Lambda时:

  • 打开请求的Authorization选项卡,选择AWS Signature
  • 填入拿到的AccessKeyId和SecretAccessKey,然后在Session Token字段粘贴SessionToken
  • 选择对应的AWS区域,就可以以这个Cognito用户的身份调用Lambda了!

最后提个关键注意点:你的IAM角色必须配置正确的信任策略,允许Cognito用户池的身份提供者扮演它,参考的信任策略如下:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-idp.你的AWS区域.amazonaws.com/你的用户池ID"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "cognito-idp.你的AWS区域.amazonaws.com/你的用户池ID:aud": "你的Cognito应用客户端ID"
        }
      }
    }
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:50:13