2

我正在使用无服务器框架来创建 API。端点在 serverless.yml 文件中定义,创建通过自定义 Authorizer 函数路由并解析为 Go Lambda 函数的 API Gateway 端点。

但是,如果客户端访问未明确定义的端点,则在Authorization标头中传入其 JWT 令牌,API 网关将返回403 Forbidden具有以下正文的响应:

{
  "message": "'{{JWT TOKEN}}' not a valid key=value pair (missing equal-sign) in Authorization header: 'Bearer {{JWT TOKEN}}'"
}

403 Forbidden状态似乎合适,但我想在响应正文中向我的客户发送更易于理解的错误消息。

当请求无效端点时,有没有办法修改响应正文?

4

1 回答 1

2

不幸的是,无服务器框架不支持本地自定义 API 网关默认响应(目前)。如果您有兴趣关注它,存储库中存在一个现有问题。

目前,您必须使用 CloudFormation 来实现这一点。您可以使用许多选项来自定义错误响应。您将想具体了解要更改的ResponseType 。

对于您的用例,看起来MISSING_AUTHENTICATION_TOKEN响应类型就是您要查找的内容。这是一个您可以调整并添加到您的示例serverless.yml(通过该resources部分):

resources:
  Resources:
    MissingAuthenticationTokenGatewayResponse: # Custom name, you can change it
      Type: 'AWS::ApiGateway::GatewayResponse'
      Properties:
        ResponseType: MISSING_AUTHENTICATION_TOKEN # The Response Type to customize
        RestApiId:
          Ref: 'ApiGatewayRestApi'
        StatusCode: '403' # The returned HTTP code
        ResponseParameters:
          # Set CORS
          gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
          gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
        ResponseTemplates:
          application/json: |
            {
              "error": "$context.authorizer.customErrorMessage"
            }

ResponseTemplates中,您可以根据需要设置 JSON 输出。此示例只是设置一个error属性,该属性将包含customErrorMessageLambda 授权方输出context属性的属性值。您可以在此处了解更多信息。如果需要,您也可以将其设置为静态字符串,但是能够动态更改代码中的错误消息相当不错。

于 2019-08-05T02:42:06.120 回答