无法在Postman(其ADMIN_NO_SRP_AUTH池)中测试经过Cognito身份验证的API网关调用

时间:2019-05-12 04:56:29

标签: amazon-web-services postman aws-api-gateway amazon-cognito

我已成功登录到通过iOS设备和Cognito创建的API网关。问题是我想用邮递员测试API调用,然后在电话上实现它们。目前,Postman无法进行身份验证(尽管AWS表示可以)。不管我做什么我都会收到401错误(在屏幕截图中可见)

我尝试过的

从AWS Api Gateway下载了邮递员收藏 enter image description here

然后将其导入邮递员,并将身份验证切换为“ AWS签名” enter image description here

这是邮递员生成的标题信息的屏幕截图 enter image description here

2 个答案:

答案 0 :(得分:1)

如果我理解正确,则您正在尝试调用内置Cognito授权器背后的API网关端点。

我认为您误解了如何调用Cognito授权API网关:

  1. 授权Cognito获得id_token
  2. Authorization标头设置为id_token的情况下调用API网关
  3. 每小时续订id_token

通过启用ADMIN_NO_SRP_AUTH,可以简化第一步(登录Cognito),以便您可以更轻松地手动进行操作。 (如果没有,则需要进行SRP计算)。

获取id_token的一种方法是使用aws cli(更多的方法在the documentation中显示):

aws cognito-idp admin-initiate-auth --user-pool-id='[USER_POOL_ID]' --client-id='[CLIENT_ID]' --auth-flow=ADMIN_NO_SRP_AUTH --auth-parameters="USERNAME=[USERNAME],PASSWORD=[PASSWORD]"

然后您可以将结果(AuthenticationResult.IdToken)用作Postman中的Authorization标头(不需要AWS v4签名-仅用于IAM身份验证)。

n.b。有关图像can be found here的详细说明。

答案 1 :(得分:0)

这是我最终解决邮递员身份验证问题的方法

1)在Cognito池中关闭了App Client Secret

2)跑aws --region us-east-1 cognito-idp admin-initiate-auth --cli-input-json file://gettoken.json

JSON文件示例

{
"UserPoolId": "us-east-1_**********", 
"ClientId": "******************", 
"AuthFlow": "ADMIN_NO_SRP_AUTH",

    "AuthParameters": {
        "USERNAME": "*********",
        "PASSWORD": "***********"
    }    
}

3)转到邮递员>授权>不记名idToken值复制到令牌字段中,一切正常。 enter image description here

注意:对于那些想知道不使用秘密客户端密钥是否安全的人。 See this article.