使用JWT和Auth0的AWS API Gateway身份验证错误IncompleteSignatureException

Rya*_*hlf 5 amazon-web-services jwt auth0 aws-api-gateway

我在哪里

我目前正在通过设置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网关的状态403响应,指示Cloudfront IncompleteSignatureException; “身份验证标头缺少等号”。

身份验证标头是

Authentication: Bearer edJ0e...[I've truncated for brevity]
Run Code Online (Sandbox Code Playgroud)

AWS是否可以期望使用键值对的其他身份验证类型?我如何告诉AWS API Gateway它应​​该寻找JWT?

Mar*_*k B 6

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

从您链接的 Auth0 教程的第 5 部分

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