【问题标题】:API Gateway Authorizer Accepts ID_token But Not Access_TokenAPI Gateway Authorizer 接受 ID_token 但不接受 Access_Token
【发布时间】:2019-04-20 02:49:39
【问题描述】:

我正在使用 API Gateway 和 Authorizer 来控制对 S3 存储桶中文件夹的访问。授权方配置为使用 Cognito 用户池。此用户池具有与之关联的 OAuth 范围 phoneemail,还有一个自定义范围,我打算授予对 S3 存储桶的读取访问权限。

但是,我发现授权者只会接受 ID 令牌来授予访问权限,如果我通过访问令牌,则返回未经授权的。根据Amazon docs,应该可以使用访问令牌。

我在请求访问令牌时遵循了here 给出的方向,因此例如我设置了auth 变量,如下所示:

var authData = {
        ClientId : '<removed>', 
        AppWebDomain : '<removed',
        TokenScopesArray : ['openid','email', 'domain.com/content/content.read'], 
        RedirectUriSignIn : '<removed>',
        RedirectUriSignOut : '<removed'
    }

我曾假设访问令牌将是我所需要的全部,这就是它的目的,但我无法让它工作。

【问题讨论】:

  • 向API网关发出请求时是否出现问题?如果是这样,您如何在请求中传递令牌?
  • Authorization 标头中。它在传入 ID 令牌而不是访问令牌时起作用。

标签: amazon-web-services amazon-s3 amazon-cognito


【解决方案1】:

如果您想通过访问令牌使用 API 网关,您必须跳过一些额外的步骤。

有关详细信息,请查看“Integrate an API with a User Pool”,尤其是关于配置 COGNITO_USER_POOLS 授权方的部分方法

具体来说,从方法请求的设置 > 授权:

  • 选择 OAuth Scopes 旁边的铅笔图标。

  • 键入在创建 Amazon Cognito 用户池时已配置的范围的一个或多个全名。例如,遵循 创建 Amazon Cognito 用户池中给出的示例,范围之一 是 com.hamuta.movi​​es/drama.view。使用单个空格分隔 多个范围。

  • 要保存设置,请选择复选标记图标。

【讨论】:

  • 这感觉就像是面对面的时刻。虽然我已经阅读了您链接的那个页面的开始,但我没有阅读它的全部。我会尝试一下,看看是否(最有可能)解决了我的问题。
  • 我对任何试图理解 Cognito 文档的人表示无限的同情和同情。 AWS 并不容易。
  • 现在非常明显……在授权选择下方有一个用于 OAuth 范围的框……但是谢谢。 AWS 文档包含所有信息,但我有时认为演示文稿可能会更好。
【解决方案2】:

让 access_token 与 GW API 一起工作:

Cognito 用户池 OAuth 2.0 设置如下

在网关 API 方法执行中使用以下设置

【讨论】:

    猜你喜欢
    • 2022-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 2022-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多