Reactjs 从Axios访问AWS API网关

Reactjs 从Axios访问AWS API网关,reactjs,amazon-web-services,aws-lambda,axios,Reactjs,Amazon Web Services,Aws Lambda,Axios,我正在尝试从Axios访问AWS API网关托管服务。使用AWS Amplify,我使用Auth.currentSession()获得一个令牌,它提供了一个CognitoIdToken。嵌入在该对象中的是jwtToken。我试图使用HTTP头中的jwtToken调用我的受保护服务(authorizer设置为AWS_IAM),尝试授权和x-api-key密钥,但都没有乐趣。给定CognitoIdToken/jwtToken,如何使用AWS_IAM的授权者调用AWS API网关服务?如果使用AWS_

我正在尝试从Axios访问AWS API网关托管服务。使用AWS Amplify,我使用Auth.currentSession()获得一个令牌,它提供了一个CognitoIdToken。嵌入在该对象中的是jwtToken。我试图使用HTTP头中的jwtToken调用我的受保护服务(authorizer设置为AWS_IAM),尝试授权x-api-key密钥,但都没有乐趣。给定CognitoIdToken/jwtToken,如何使用AWS_IAM的授权者调用AWS API网关服务?

如果使用AWS_IAM身份验证,则需要将AWS SigV4与cognito用户获得的访问密钥、密钥和会话密钥一起使用,作为其授权的一部分


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

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

  • 选择您的API并转到左侧面板上的授权人选项。单击创建新授权人。然后选择cognito并在那里添加您的cognito用户池。将您的令牌源命名为“授权”。保持令牌验证为空。点击保存
  • 您可以使用JWT令牌测试您的新授权者。当您使用AWS amplify登录时,可以在控制台上打印JWT令牌,并使用该令牌测试API授权器。如果您从cognito池中获取用户信息,那么您的授权者配置成功
  • 下一个重要步骤是将授权用户信息从API传递给Lambda。您需要在资源方法的集成请求中配置该资源。为此,请在API网关中选择您的方法并单击Integration Request,然后单击Mapping Templates,这是最后一个选项。单击后,选择第二个单选按钮“当没有定义模板时(推荐)”。然后在内容类型中单击AddMappingTemplate,并将此模板名称命名为“application/json”。选择这个模板,在屏幕底部你们会看到这个框。在这个框中,您需要编写获取cognito用户详细信息的模板。您可以参考以下模板
  • 您可以通过此链接获得有关AWS中模板的更多详细信息


    希望这有帮助。

    在API网关级别,我的选择是AWS_IAM或NONE,没有Cognito身份验证。如果我查看CognitoIdToken,有效负载不包含AWS SigV4以及您的访问密钥、密钥和会话密钥。好的,我明白您的意思。我需要创建一个CognitoAuthorizer,并将其分配给每个服务作为其授权机制。您不需要使用cognito用户。Postman能够单独使用访问密钥和密钥生成请求。我能够根据Chris的提示将所有请求连接起来。我现在唯一的问题是我想创建一个shell脚本,它将登录并返回JWT令牌。你的第二步要求我启动一个我希望避免的网页。
    #set($inputRoot = $input.path('$'))
    {
        "cognitoUsername": "$context.authorizer.claims.email"
    }