从Axios访问AWS API Gateway

时间:2019-03-20 11:42:50

标签: reactjs amazon-web-services aws-lambda axios

我正在尝试从Axios访问AWS API Gateway托管的服务。使用AWS Amplify,我使用Auth.currentSession()获得令牌,该令牌传递 CognitoIdToken 。 jwtToken嵌入在该对象中。我尝试使用HTTP标头中的jwtToken调用受保护的服务(授权者设置为AWS_IAM),同时尝试 Authorization x-api-key 键,没有喜悦。给定CognitoIdToken / jwtToken,您如何通过AWS_IAM的授权者调用AWS API Gateway服务?

2 个答案:

答案 0 :(得分:0)

如果您使用的是AWS_IAM身份验证,则需要将AWS SigV4与您的访问密钥,秘密密钥和会话密钥一起使用,您的认知用户将其作为授权的一部分。

如果要将cognito JWT用作身份验证机制,则需要更改代码以在API网关级别使用cognito身份验证。

答案 1 :(得分:0)

我一直在使用API​​网关和Cognito来为我的Vuejs应用程序授权。您可以按照以下步骤轻松进行配置。

  1. 选择您的API,然后转到左侧面板上的“授权者”选项。单击创建新授权者。然后选择cognito并在此处添加您的Cognito用户池。将您的令牌源命名为“授权”。将令牌验证保留为空。点击保存。
  2. 您可以使用JWT令牌测试新的授权者。使用AWS Amplify登录并使用该令牌测试API授权者时,可以在控制台上打印JWT令牌。如果您从cognito池中获取用户信息,则说明您的授权者已成功配置。
  3. 下一个重要步骤是将授权用户信息从API传递到Lambda。您需要在资源方法的“集成请求”中进行配置。为此,请在API网关中选择您的方法,然后单击“集成请求”,然后单击“映射模板”,这是最后一个选项。单击后,选择第二个单选按钮“当未定义模板时(推荐)”。之后,在内容类型中单击添加映射模板,然后将此模板名称指定为“ application / json”。选择此模板,然后在屏幕底部看到框。在该框中,您需要编写模板以获取Cognito用户详细信息。您可以参考以下模板。
#set($inputRoot = $input.path('$'))
{
    "cognitoUsername": "$context.authorizer.claims.email"
}

您可以点击此链接以获取有关AWS中模板的更多详细信息 https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html

希望这会有所帮助。