我试图让我的 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": "-" }
谢谢。如有任何帮助,我们将不胜感激。
事实证明,复制
access_token
也是一个非常愚蠢的错误。有了正确的id_token
,它就起作用了。我花了两天时间才搞清楚!!!
尽管我的
id_token
有效并通过标头正确传递到 API 网关,但我还是出现了此症状 authorization
在 API 网关资源方法执行设置中
API:YourAPI
>Resources
>GET
>Method Request
>Settings
确保 OAuth Scopes
设置为空。由于某种原因,我的设置为email
我希望我在这方面花费的 18 小时也能为您节省一点时间。
我还想承认它不起作用的一个愚蠢原因,对我来说,这是因为在设置授权者时,我将令牌源设置为“授权者”,但是在邮递员上我使用的是“授权”。