API 网关授权方接受 ID_token 但不接受 Access_Token

Ker*_*rry 5 amazon-s3 amazon-web-services amazon-cognito

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

但是,我发现授权方只会接受 ID 令牌以授予访问权限,如果我通过访问令牌,则返回未经授权。根据亚马逊文档,应该可以使用访问令牌。

我在请求访问令牌时遵循了here给出的方向,例如我设置了这样的auth变量:

var authData = {
        ClientId : '<removed>', 
        AppWebDomain : '<removed',
        TokenScopesArray : ['openid','email', 'domain.com/content/content.read'], 
        RedirectUriSignIn : '<removed>',
        RedirectUriSignOut : '<removed'
    }
Run Code Online (Sandbox Code Playgroud)

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

tho*_*ace 7

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

有关完整详细信息,请查看“将 API 与用户池集成”,特别是有关在方法上配置 COGNITO_USER_POOLS 授权者的部分。

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

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

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

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

  • 我对任何试图理解 Cognito 文档的人表示无限的时间和同情。AWS 并没有让这一切变得容易。 (8认同)