AWS API Gateway 身份验证错误 IncompleteSignatureException 使用带有 Auth0 的 JWT
Posted
技术标签:
【中文标题】AWS API Gateway 身份验证错误 IncompleteSignatureException 使用带有 Auth0 的 JWT【英文标题】:AWS API Gateway authentication error IncompleteSignatureException using JWT with Auth0 【发布时间】: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?
【问题讨论】:
【参考方案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 件事:
-
通过 IAM/STS 获取 AWS 凭证,如 auth0 example 中所述,并使用这些凭证签署您的请求。
如 Mark B's answer 中所述,按照 auth0 教程的 step 5 中的说明,禁用 AWS_IAM 身份验证并在您的 Lambda 中进行验证。
改用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/
【讨论】:
以上是关于AWS API Gateway 身份验证错误 IncompleteSignatureException 使用带有 Auth0 的 JWT的主要内容,如果未能解决你的问题,请参考以下文章
AWS Cognito 和 AWS API Gateway 中的用户管理和基于令牌的身份验证
CloudFront 后面的 API Gateway 不支持 AWS_IAM 身份验证吗?
如何使用 AWS API Gateway 设置 OAuth2 身份验证提供程序?
如何在 AWS API Gateway 中调试“缺少身份验证令牌”?