我正在尝试使用带有cognito用户池的aws api网关授权程序。当我使用aws api网关控制台进行测试时,它工作正常。
但是,当我尝试在api中启用授权时,"message": "Unauthorized".
请查看以下屏幕截图
有人可以帮忙吗。
仅供参考我遵循了http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html
中提到的说明答案 0 :(得分:4)
我试过Mathias'解决方案,它起初并没有起作用。奇怪的是,我可以在几小时后回到它并再次尝试,这次在部署API之前对我的API网关进行了一些其他更改。这次它起作用了,尽管我做的其他改变都很肤浅。
此外,通常情况下,AWS文档是错误的,声明您应该使用method.response.header.Authorization
。这实际上仅对使用自定义身份验证的Lambdas有效。当您使用新的Cognito用户池授权程序时,您确实应该只使用Authorization
。
Authorization
而非method.response.header.Authorization
- 编辑 -
我只是将我的堆栈转换为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
)
保存它,在测试之前不要忘记部署。
答案 3 :(得分:1)
如果您未在API网关的方法执行块的OAuth Scopes
处检查作用域,则仅需id-token
。
一旦您根据请求设置了OAuth范围限制,它将自动开始获取访问令牌。
答案 4 :(得分:0)
我遇到了同样的问题,解决方案只是重新部署项目。
答案 5 :(得分:0)
以下步骤为我解决了该问题。简而言之,AWS API Gateway中似乎存在一个错误。您可以通过重新部署API来解决此问题:
答案 6 :(得分:0)
答案 7 :(得分:0)
将授权器中的令牌源更改为授权以外的其他内容(例如:授权),然后部署 API 并在 Postman 的标头中提供它对我有用。不管我们怎么称呼header,我猜它都会被API网关翻译和使用。