如何更改我的Web应用程序以使用签名v4来调用API网关?

时间:2018-04-22 00:58:37

标签: amazon-web-services aws-api-gateway

我已经用AWS开发了一个Web应用程序几个月了。我尽可能地尽可能地利用最佳实践。无服务器,使用API​​网关和Lambda函数等。此时,我有一个工作的Web SPA调用API网关,现在我遇到了我的API的身份验证/授权。

了解Cognito,我遇到了this nice presentation以不同的方式将其用于身份验证/授权。我的问题主要是关于授权部分。显然,有三种方法可以实现授权。最安全的是签名v4。暂且不谈我需要在AWS上做的准备工作,我想知道我需要对客户端代码应用哪些更改。

目前,当前的实现只是将HTTP请求发送到API网关,并在标头中嵌入id_token。这可确保只有经过身份验证的用户才能进行呼叫。但它没有检查授权。

根据演示文稿,如果我想使用签名v4,我必须将我的id_token与一些AWS凭证(通过调用Amazon Cognito联合身份)交换,然后使用这些AWS凭证制作我的API网关请求的不同版本并使用它。

现在,我的问题是:

  1. 我是否需要明确调用联合身份?
  2. 如果是,这是否意味着每次我想发送新请求时都必须拨打电话?
  3. 有关实施的任何提示/示例?

1 个答案:

答案 0 :(得分:0)

从2019年开始,您可以通过AWS控制台或AWS SAM API Auth Object设置API Gateway Authorization(Access Control) with IAM。 如果使用SAM,则如下所示:

MyApi:
  Type: AWS::Serverless::Api
  Properties:
    StageName: Prod
    Auth:
      DefaultAuthorizer: AWS_IAM
MyFunction:
  Type: AWS::Serverless::Function
  Properties:
    FunctionName: MyFunction
    ...
    Events:
      Post:
        Type: Api
        Properties:
          Path: /compute
          Method: POST
          RestApiId: !Ref MyApi
          Auth:
            Authorizer: AWS_IAM

在前端,您可以use AWS Amplify sdk to access your API。它会使用Signature V4自动签署您的API请求。