【问题标题】:AWS API Gateway authentication error IncompleteSignatureException using JWT with Auth0AWS API Gateway 身份验证错误 IncompleteSignatureException 使用带有 Auth0 的 JWT
【发布时间】:2016-09-15 03:31:09
【问题描述】:

我在哪里

我目前正在为 AWS API Gateway 设置 Auth0 委托身份验证。我遵循了以下文档和教程,但我有一个应用程序而不是他们的示例应用程序:

https://auth0.com/docs/quickstart/spa/angular2/aws

https://auth0.com/blog/2015/11/10/introducing-angular2-jwt-a-library-for-angular2-authentication/

https://auth0.com/docs/client-platforms/angular2

https://auth0.com/docs/integrations/aws-api-gateway/part-2

什么工作

  • 从我的 Angular2 应用程序进行的 Auth0 登录工作正常,我正在获取令牌。
  • 当我调用 AWS API 网关时,Auth0 的 AuthHttp 组件将持有者令牌附加到 Authenticate 标头。

什么不工作

  • 来自 AWS API Gateway 的状态 403 响应,指示 Cloudfront IncompleteSignatureException; “身份验证标头缺少等号”。

认证头是

Authentication: Bearer edJ0e...[I've truncated for brevity]

AWS 是否可以期待使用键值对的不同类型的身份验证?如何告诉 AWS API Gateway 它应该在寻找 JWT?

【问题讨论】:

    标签: amazon-web-services jwt aws-api-gateway auth0


    【解决方案1】:

    我猜您已经为您的 API Gateway 端点启用了AWS_IAM 身份验证。如果您不打算使用它,则需要禁用它。如果您计划在 JWT 之外使用 AWS_IAM 身份验证,那么您必须使用不同的字段发送 JWT 令牌。

    来自您链接的 Auth0 教程的 part 5

    最后一步是将 JWT 从浏览器传递给方法 客户。标准方法是使用 Authorization 标头作为 不记名令牌,如果您关闭 IAM,您可以使用此方法 授权并仅依靠 OpenID 令牌进行授权 (您还需要将 Authorization 标头映射到事件中 传递给 AWS Lambda 函数的数据)。如果您使用的是 IAM,那么 AWS API Gateway 使用 Authorization 标头来包含 消息的签名,您将通过以下方式破坏身份验证 将 JWT 插入此标头。您可以添加自定义 JWT 的标头,或将其放入消息的正文中。如果你 选择使用自定义标头,您还需要为 POST方法的集成请求

    【讨论】:

      【解决方案2】:

      根据错误消息,您似乎已经为 AWS_IAM 身份验证配置了 API。这需要使用AWS Signature Version 4 签署您的请求。

      为了执行 API 网关功能,您需要做 3 件事中的 1 件事:

      1. 通过 IAM/STS 获取 AWS 凭证,如 auth0 example 中所述,并使用这些凭证签署您的请求。
      2. Mark B's answer 中所述,按照 auth0 教程的 step 5 中的说明,禁用 AWS_IAM 身份验证并在您的 Lambda 中进行验证。
      3. 改用a custom authorizer直接在API网关层验证JWT。这将要求您使用 Auth0 提供的代码来验证令牌,然后构建您自己的授权结果。

      【讨论】:

        【解决方案3】:

        (代表问题作者发布).

        更新

        Mark B 和 Bob Kinney 都是正确的。我所做的(你可能也有)是在我在这个问题顶部发布的各种 Auth0 链接中跳来跳去,并尝试使用他们的 angular2-jwt 库(带有 AuthHttp 组件)来使教程适应 Angular2,同时遵循以及他们使用 AWS API Gateway 设置 Auth0 的 5 部分示例。 AuthHttp 组件将自动将 JWT Bearer 令牌放入“身份验证”HTTP 标头中,这与由 IAM 授权保护的 AWS API Gateway 调用不兼容。正如这些男士向我展示的那样,本教程的第 5 部分对此进行了解释。如果您只完成了第 4 部分并且它无法正常工作,希望这能像我一样回答您的问题。

        更新 2

        已更新 Auth0 Angular2 教程以反映 Angular2 rc 1。https://auth0.com/blog/2015/05/14/creating-your-first-real-world-angular-2-app-from-authentication-to-calling-an-api-and-everything-in-between/

        【讨论】:

          猜你喜欢
          • 2021-10-08
          • 2020-03-27
          • 2021-08-28
          • 1970-01-01
          • 2020-07-18
          • 2016-08-20
          • 2018-04-19
          • 2019-12-14
          • 2021-11-20
          相关资源
          最近更新 更多