【问题标题】:API gateway Cognito user pool authorizer - 401 unauthorizedAPI 网关 Cognito 用户池授权者 - 401 未授权
【发布时间】:2018-11-19 13:29:42
【问题描述】:

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

我使用 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", “来电者”:“-”, “用户”:“-”, "requestTime": "09/Jun/2018:20:43:15 +0000", "httpMethod": "GET", "resourcePath": "/test", “状态”:“401”, “协议”:“HTTP/1.1”, “响应长度”:“26”, “authProvider”:“-”, “authType”:“-”, "claimProperty": "-", “财产”: ”-”, “principalId”:“-” }

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

【问题讨论】:

    标签: aws-api-gateway amazon-cognito


    【解决方案1】:

    原来复制access_token 也是一个非常愚蠢的错误。使用正确的id_token,它起作用了。我花了 2 天时间弄明白了!!!

    【讨论】:

    • 我也有同样的经历。可以用id_token代替access_token吗?
    • id_token 可能包含一些用户信息 (PII),因此不建议用于 API 访问。除此之外,我看不出两者之间有任何区别。
    • 你是对的 它可能包含 PII 数据。我们现在遇到的另一个问题是我们无法在需要访问令牌的后端 api 中执行命令,例如global_sign_out。
    • 你救了我
    • 更新你就是男人!我意识到我犯了与您完全相同的错误,即我没有意识到在复制 id_token 的值时我还包括了 &access_token=<access_token>,这当然会给我一个 401。
    【解决方案2】:

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

    我正在对 Postman 进行测试和验证。我添加了Authorization 标头并传入了我的id_token。但是,我从未勾选复选框以在我的实际请求中实际包含标头: 希望这可以使人们免于花费数小时调试 API Gateway 和 Cognito 上的所有可能配置,只是意识到我从一开始就没有发送标头!

    【讨论】:

      猜你喜欢
      • 2020-03-31
      • 2017-10-25
      • 2018-08-07
      • 2017-09-04
      • 2022-11-10
      • 2019-11-07
      • 2019-12-12
      • 2018-01-12
      • 2020-05-18
      相关资源
      最近更新 更多