AWS API 具有 Cognito 授权的网关从不阻止请求,即使 ID 令牌无效

AWS API Gateway with Cognito Authorization never blocks requests even with invalid id tokens

我关注 this AWS API Gateway doc 并使用 cognito identity token 为我的 API 设置了授权。我在 API Gateway 控制台中测试了我的 cognito id 令牌,它有效:它给了我正确的值,从令牌中正确检索了 sub 和电子邮件值:

testing the id token works

然后我将授权者添加到我的方法中:

my method request

但是当我现在测试我的方法时,当我从 API 网关(方法内部)中的测试表单发​​送它们时,所有请求仍然通过(提供或不提供身份令牌):

teting with no token or invalid token

我本以为会收到“未经授权”或“访问被拒绝”的响应,但我得到的是 200。 我还尝试将方法请求中的“API Key Required”设置为 true 并需要一个 Autorization Header,但即使这样来自上面的请求也会以状态 200:

setting API Key Required to true

我也加了

"context" : {
        "sub" : "$context.authorizer.claims.sub",
        "email" : "$context.authorizer.claims.email"
}

到我的映射模板,所以完整的模板现在看起来像这样:

{
    "TableName": "myUsersTable",
    "Key": {
        "id": {"S": "$input.params('id')"},
        "username": {"S": "$input.params('id')"}
    },
    
    "context" : {
        "sub" : "$context.authorizer.claims.sub",
        "email" : "$context.authorizer.claims.email"
    }
}

但是子和电子邮件的日志始终为空(并且响应状态仍然是 200):

Tue Dec 29 10:35:46 UTC 2020 : Endpoint request body after transformations: {
    "TableName": "myUsersTable",
    "Key": {
        "id": {"S": "testUser"},
        "username": {"S": "testUser"}
    },
    
    "context" : {
        "sub" : "",
        "email" : ""
    }
}

我做错了什么?

对我来说,当我在 API 网关控制台中测试它时,它从未起作用。但是当你使用 Postman 时,它应该可以工作(将方法请求中的“API Key Required”设置回 false 并删除需要 Autorization Header,然后再次部署你的 API 并测试它与 Postman 一起,将您的令牌放入请求 header 中,如下所示:

您的 sub 和 email 值的映射模板似乎也是正确的。我认为当您使用 API 网关控制台进行测试时,会跳过整个授权验证,但我不确定。改用 Postman,应该可以。

另请参阅:https://medium.com/@chandupriya93/providing-authorization-to-api-gateway-with-cognito-identity-pools-af451fd3b532