AWS Api网关授权程序+ Cognito用户池无法正常工作{"message":"Unauthorized"}

Man*_*uru 13 amazon-web-services aws-api-gateway aws-cognito

我正在尝试使用带有cognito用户池的aws api网关授权程序.当我使用aws api网关控制台进行测试时,它工作正常.

但是,当我尝试在api中启用授权时,"message": "Unauthorized".请检查下面的屏幕截图

API网关控制台截图 - 这很好用 在此输入图像描述

邮差屏幕截图 - 不工作 在此输入图像描述

请有人帮忙吗.

仅供参考我遵循这里提到的说明http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html

C.L*_*Lee 12

以下步骤为我解决了问题。简而言之,AWS API Gateway 中似乎存在错误。您可以通过重新部署 API 来修复它:

  1. 将请求验证器从NONE更改为Validate Body
  2. 操作->部署 API -> 选择要将其部署到的阶段。
  3. 将请求验证器从Validate Body更改为NONE
  4. 重做第 2 步。

在此处输入图片说明

  • 就我而言,只有第 2 步成功了 (2认同)

Lon*_*yen 10

就我而言,授权代码应为id_token。我access_token改用了一个错误

  • 老实说,这真是令人困惑。那么access_token到底有什么意义呢?oauth 范围甚至不属于 id_token,所以除非它再次获取 access_token,否则我不会得到它 (3认同)
  • 对我来说同样的问题,同样的解决方案。谢谢! (2认同)
  • 谢谢,我也花了2天时间。 (2认同)
  • 很高兴我一收到问题就发现了这一点。奇怪的是 access_token 不是那个。 (2认同)

Mil*_*les 6

我尝试了 Mathias 的解决方案,但一开始没有用。奇怪的是,我可以在几个小时后返回并再次尝试,这次在部署 API 之前对我的 API 网关进行了一些其他更改。这次它奏效了,尽管我所做的其他更改是肤浅的。

此外,通常情况下,AWS 文档是错误的,指出您应该使用method.response.header.Authorization. 这实际上仅对使用自定义身份验证的 Lambda 有效。Authorization当您使用新的 Cognito 用户池授权器时,您确实应该在这里使用。

  1. Authorization不使用method.response.header.Authorization
  2. 对 API Gateway 中的资源进行表面更改
  3. 部署您的 API 并稍等片刻

- 编辑 -

我只是将我的堆栈转换为 Cloudformation 并发现如果您使用 Cloudformation 来部署授权器,您实际上需要method.response.header.Authorization为令牌源指定完整的。事实上,如果您不使用该格式,堆栈部署将失败。但是,一旦部署,如果您查看控制台中的 Authorizer,它就会删除该method.response.header部分。


Har*_*var 5

如果您没有在OAuth ScopesAPI 网关的方法执行块中检查作用域,则只会使用id-token.

一旦您根据请求设置了 OAuth 范围限制,它将开始自动获取访问令牌。


Mat*_*ias 4

我遇到了和你一样的问题,并意识到我输入了错误的令牌源。

输入<your API> -> Authorizers -> Token SourceAPI 网关必须在其中查找令牌的 HTTP 标头的名称。(就你而言Authorization

保存它,并且在测试之前不要忘记部署。

在此输入图像描述

  • 仅供参考,我已将授权作为令牌源并部署了 API,但仍然面临同样的问题。 (2认同)
  • 如果我没记错的话,我将其复制到微软画图,选择该区域,使该区域非常小,然后再次恢复到原始大小。 (2认同)