API 网关 Cognito 用户池授权者 - 401 未经授权

问题描述 投票:0回答:4

我试图让我的 API 网关与 Cognito 用户池授权者一起工作,但我似乎无法让它工作。到目前为止我还没有使用任何 SDK。一些细节 - 对于 Cognito 池,我将 ID 提供程序设置为 cognito 用户池,将 Oauth 流程设置为“隐式授予”,并将范围设置为“openid”。创建了一个应用程序(和域),还生成了客户端密钥。电子邮件是唯一的字段。 - 在 API 网关上,我添加了与“授权”相同的用于认知身份验证和标头的用户池。没有添加范围,也没有令牌验证。

我使用 Cognito 的默认登录页面登录并检索“id_token”(登录后出现在 URL 中),并在邮递员中使用它来将我的 API 触发为“401 未经授权”。我在 API 网关授权者测试工具中使用相同的令牌,但仍然未经授权。很明显我的代币就是问题所在。

我已经尝试了 oauth 流、范围和 api 网关与 lambda 集成的各种组合,以创建另一个具有模拟集成的组合。还创建了不同的用户池和应用程序,有或没有客户端密钥,出现相同的错误。

如果上面的方法不起作用(相信我的错误),但同样的事情也适用于尝试过的同事。唯一的区别是,登录后,他定向到本地主机页面,在其中捕获相同的“id_token”并使用该令牌成功访问 API 网关。

所以我不明白有什么区别?它不应该按照我尝试的方式工作吗?

当我从邮递员那里点击 API 时,一些 cloudwatch 访问日志。 (也尝试过卷曲)

{ "requestId": "bb9ba6a2-6c25-11e8-b024-530b33bce48d", "ip": "x.x.x.x", “来电者”:“-”, “用户”:“-”, "请求时间": "2018年6月9日:20:43:15 +0000", "httpMethod": "GET", "资源路径": "/测试", “状态”:“401”, “协议”:“HTTP/1.1”, “响应长度”:“26”, “authProvider”:“-”, “authType”:“-”, "claimProperty": "-", “财产”: ”-”, "principalId": "-" }

谢谢。如有任何帮助,我们将不胜感激。

aws-api-gateway amazon-cognito
4个回答
29
投票

事实证明,复制

access_token
也是一个非常愚蠢的错误。有了正确的
id_token
,它就起作用了。我花了两天时间才搞清楚!!!


3
投票

我想提交另一个非常愚蠢的原因,为什么这不起作用 - 除了已接受的答案提到的所有事情之外,绝对要做所有事情:

我正在 Postman 上进行测试和验证。我添加了

Authorization
标头并传入了我的
id_token
。但是,我从未勾选复选框以在实际请求中实际包含标头: 希望这可以让人们免于花费数小时调试 API Gateway 和 Cognito 上的每个可能的配置,却发现我一开始就没有发送标头!


0
投票

尽管我的

id_token
有效并通过标头正确传递到 API 网关,但我还是出现了此症状
authorization

在 API 网关资源方法执行设置中

API:YourAPI
>
Resources
>
GET
>
Method Request
>
Settings
确保
OAuth Scopes
设置为空。由于某种原因,我的设置为
email

我希望我在这方面花费的 18 小时也能为您节省一点时间。


0
投票

我还想承认它不起作用的一个愚蠢原因,对我来说,这是因为在设置授权者时,我将令牌源设置为“授权者”,但是在邮递员上我使用的是“授权”。

© www.soinside.com 2019 - 2024. All rights reserved.