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

时间:2018-06-09 20:45:51

标签: aws-api-gateway amazon-cognito

我试图让我的API网关与Cognito用户池授权程序一起工作,但我似乎无法让它工作。我目前没有使用任何SDK。一些细节 - 对于Cognito池,我有设置ID提供者作为cognito用户池,Oauth flow' impilicit grant' &安培;范围为' openid'。创建了一个也生成了客户端密钥的应用程序(&域)。电子邮件是唯一的字段。 - 在API网关上,我为cognito auth&添加了相同的用户池。标题为'授权'。没有添加范围且没有令牌验证。

我使用Cognito的默认登录页面登录&检索' id_token' (登录后显示在URL中)&在邮递员中使用它来激活我的API到未授权的#39;我在API网关授权器测试工具&中使用相同的标记。我仍然未经授权。很明显,我的标记就是问题。

我已经尝试过oauth flow&的各种组合。范围&使用lambda集成的api网关创建另一个具有模拟集成的网关。还创建了不同的用户池和应用&没有客户机密,也是同样的错误。

上面没有工作我会好的(相信我的错误),但同样的事情适用于尝试过的同事。唯一的区别是,在登录后,他指向一个本地主页,在那里他捕获了相同的“id_token”#39; &安培;成功地使用该令牌命中API网关。

所以我无法弄清楚区别是什么?是不是应该按照我的方式工作?

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

  

{      " requestId":" bb9ba6a2-6c25-11e8-b024-530b33bce48d",      " ip":" x.x.x.x",      "来电":" - ",      "用户":" - ",      " requestTime":" 09 / Jun / 2018:20:43:15 + 0000",      " httpMethod":" GET",      " resourcePath":" / test",      " status":" 401",      " protocol":" HTTP / 1.1",      " responseLength":" 26",      " authProvider":" - ",      " authType":" - ",      " claimProperty":" - ",      "属性":" - ",      " principalId":" - "   }

感谢。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:7)

原来是复制access_token的一个非常愚蠢的错误。正确id_token它有效。花了我2天时间弄明白!!!

答案 1 :(得分:1)

我想提出另一个很愚蠢的原因,为什么它不起作用-除了已接受的答案提到的所有内容之外,还应该做所有其他事情:

我正在对Postman进行测试和验证。我添加了Authorization标头,并传递了id_token。但是,我从未在实际请求中打勾复选框以实际包含标头: enter image description here 希望这可以节省一些时间,避免花费大量时间在API Gateway和Cognito上调试所有可能的配置,而只是意识到我从来没有发送过标头!