【问题标题】:Cognito User Pools with API Gateway带有 API 网关的 Cognito 用户池
【发布时间】:2017-03-03 00:17:12
【问题描述】:

我不明白为什么我的用户池不会在我的 API 中验证方法。

我从简单的 petstore 示例开始,并为我的用户池添加了一个 Authorizer。测试按钮显示我拥有的 JWT 正在工作。我将该 Authorizer 应用于 /pets 上的 POST 方法,将 Authorization 添加为请求标头。

当使用邮递员(或 curl)POST 到 /pets 时,传递 Authorization: Bearer <token> 标头我总是得到响应 {"message":"Unauthorized"}

我已经搞砸了创建一个链接到用户池的身份池,该身份池具有一个经过身份验证的角色,该角色具有允许访问 API 网关的策略。我在用户池中创建了一个组来分配这个组。

一定有一些我错过了。我只想允许任何从 Cognito 提供有效 ID JWT 的用户访问 POST 方法。

政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke"
            ],
            "Resource": "arn:aws:execute-api:us-east-1:*:XXX/*/POST/*"
        }
    ]
}

在模拟器中效果很好。不过,我不能 100% 确定该政策是否应该发挥作用。我不清楚提供的用户池身份验证器将如何获取该策略,它不在我看到的任何文档中。我刚开始往墙上扔飞镖。

希望听到有人使用用户池保护了 API 网关端点。

【问题讨论】:

  • 您能否发布允许访问 API 网关的策略?请注意,该操作需要是“execute-api:Invoke”而不是“apigateway:*”(用于 API 管理 API)

标签: aws-api-gateway aws-cognito


【解决方案1】:

对我来说,使用 Postman 在授权标题中没有“Bearer”的情况下工作。

【讨论】:

  • 不能对此进行足够的投票。虽然 curl 是一样的,所以这不是邮递员的错,“^Bearer\s”被记录为必需的。但我的经验表明 Authorization: 标头应该只是 Id JWT
  • 是否需要设置策略?我已经在我的 API 函数上设置了授权者以使用正确的 cognito 用户池并传入从内置登录页面返回的 id_token,但我收到“未授权”消息。 (我尝试将策略设置为您的示例,但得到“请检查策略语法并确保主体有效”)
猜你喜欢
  • 2017-10-25
  • 2017-09-04
  • 2020-11-27
  • 2018-11-19
  • 2020-03-31
  • 2023-03-04
  • 1970-01-01
  • 2018-01-12
  • 2021-03-05
相关资源
最近更新 更多