我目前正在为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
身份验证标头是
Authentication: Bearer edJ0e...[I've truncated for brevity]
AWS是否期望使用键值对的不同类型的身份验证?如何告诉AWS API Gateway它应该在寻找JWT?
答案 0 :(得分:2)
我猜你为API网关端点启用了AWS_IAM
身份验证。如果您不打算使用它,则需要禁用它。如果您计划在JWT之外使用AWS_IAM
身份验证,则必须使用其他字段发送JWT令牌。
来自您关联的Auth0教程的part 5:
最后一步是将JWT从浏览器传递给方法 客户。标准方法使用
Authorization
标题作为 不记名令牌,如果关闭IAM,可以使用此方法 授权并仅依靠OpenID令牌进行授权 (您还需要将Authorization标头映射到事件中 传递给AWS Lambda函数的数据)。如果您正在使用IAM,那么 AWS API网关使用Authorization
标头来包含 邮件的签名,您将破坏身份验证 将JWT插入此标头。您可以添加自定义 JWT的标题,或者将其放入消息正文中。如果你 选择使用自定义标题,您还需要进行一些映射 POST方法的集成请求
答案 1 :(得分:1)
根据错误消息,听起来您已经为AWS_IAM身份验证配置了API。这需要您使用AWS Signature Version 4签署您的请求。
要执行API网关功能,您需要执行以下三项操作之一:
答案 2 :(得分:-1)
(代表作者提问)。
Mark B和Bob Kinney都是正确的。我所做的(你可能也有)是在我在这个问题的顶部发布的各种Auth0链接中跳转并尝试使用他们的angular2-jwt库(使用AuthHttp组件)使教程适应Angular2,同时遵循以及使用AWS API Gateway设置Auth0的5个部分示例。 AuthHttp组件将自动将JWT Bearer令牌放入“Authentication”HTTP标头中,该标头与IAM授权保护的AWS API Gateway调用不兼容。正如这些男士向我展示的那样,本教程的第5部分对此进行了解释。如果你只进入了第4部分并且它无法正常工作,那么这就像我的那样回答你的问题。
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/