AWS Api网关授权程序+ Cognito用户池无法正常工作{"消息":"未经授权"}

时间:2017-09-21 13:17:46

标签: amazon-web-services aws-api-gateway aws-cognito

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

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

API网关控制台截图 - 这很好用 enter image description here

邮差截屏 - 不工作 enter image description here

有人可以帮忙吗。

仅供参考我遵循了http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html

中提到的说明

8 个答案:

答案 0 :(得分:4)

我试过Mathias'解决方案,它起初并没有起作用。奇怪的是,我可以在几小时后回到它并再次尝试,这次在部署API之前对我的API网关进行了一些其他更改。这次它起作用了,尽管我做的其他改变都很肤浅。

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

  1. 使用Authorization而非method.response.header.Authorization
  2. 在API网关中对您的资源进行肤浅的更改
  3. 部署您的API并等待一秒
  4. - 编辑 -

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

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

<your API> -> Authorizers -> Token Source中输入API网关必须查找令牌的HTTP标头的名称。 (在您的情况下为Authorization

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

enter image description here

答案 3 :(得分:1)

如果您未在API网关的方法执行块的OAuth Scopes处检查作用域,则仅需id-token

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

答案 4 :(得分:0)

我遇到了同样的问题,解决方案只是重新部署项目。

答案 5 :(得分:0)

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

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

enter image description here

答案 6 :(得分:0)

尝试以下3个步骤(不要忘记部署API),并尝试通过POST man发送请求

  1. 缓存

enter image description here

  1. 方法请求的设置

enter image description here

  1. 部署API

enter image description here

答案 7 :(得分:0)

将授权器中的令牌源更改为授权以外的其他内容(例如:授权),然后部署 API 并在 Postman 的标头中提供它对我有用。不管我们怎么称呼header,我猜它都会被API网关翻译和使用。