API Gateway的授权者接受ID令牌但不接受访问令牌。

10

我正在使用API网关和一个授权者来控制对S3存储桶中文件夹的访问。授权者配置为使用Cognito用户池。这个用户池有OAuth Scopes phoneemail与之关联,还有一个自定义范围,我想授予它读取S3存储桶的访问权限。

然而,我发现授权者只接受ID令牌来授予访问权限,如果我传递访问令牌,则返回未经授权。根据Amazon文档,应该可以使用访问令牌。

当请求访问令牌时,我遵循此处给出的指示,例如,我设置了auth变量如下:

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

我原以为访问令牌就是我所需的并且它的作用就是如此,但我无法让它工作。


问题出现在向API网关发出请求时吗?如果是这样,您是如何在请求中传递令牌的? - bwest
1
在“授权”标头中。当传递ID令牌时,它可以工作,但不包括访问令牌。 - D-Dᴙum
2个回答

7

如果您想使用访问令牌与API Gateway配合使用,需要多做一些工作。

详细信息请参阅“将API与用户池集成”,特别是有关在方法上配置COGNITO_USER_POOLS授权程序的部分。

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

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

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

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


这感觉就像是一个摊手的时刻。虽然我读了你链接页面的 _开头_,但我没有读完整个页面。我会尝试一下,看看是否可以解决我的问题(很可能)。 - D-Dᴙum
8
我非常理解任何试图理解Cognito文档的人所需花费的时间和心思。AWS并没有让这件事变得容易。 - thomasmichaelwallace
1
真的是尴尬地明显啊,授权选择下面有一个OAuth范围的框..不过还是谢谢。AWS文档中包含所有信息,但有时我觉得展示可以更好一些。 - D-Dᴙum

0

使access_token与GW API配合使用:

Cognito用户池OAuth 2.0设置如下:

enter image description here

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

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接