我正在使用Serverless framework创建一个 API。端点在 serverless.yml 文件中定义,创建 API 网关端点,这些端点通过自定义 Authorizer 函数进行路由并解析为 Go Lambda 函数。
但是,如果客户端访问尚未显式定义的端点,并在 Authorization
header 中传入其 JWT token ,API Gateway 将返回 403 Forbidden
响应,其中包含以下正文:
{
"message": "'{{JWT TOKEN}}' not a valid key=value pair (missing equal-sign) in Authorization header: 'Bearer {{JWT TOKEN}}'"
}
403 Forbidden
状态似乎合适,但我想在响应正文中向我的客户发送更容易理解的错误消息。
当请求无效端点时,是否可以修改响应正文?
最佳答案
不幸的是,无服务器框架(尚)不支持原生自定义 API Gateway 默认响应。 有一个existing issue如果您有兴趣关注它,请在存储库中。
目前,您必须使用 CloudFormation 来实现此目的。有number of options您可以使用customize error responses 。 您会想具体了解什么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
属性,该属性将包含 Lambda 授权方输出 context
属性的属性 customErrorMessage
的值。
您可以详细了解这个here 。
如果需要,您也可以将其设置为静态字符串,但是能够动态更改代码中的错误消息是相当不错的。
关于aws-lambda - 当请求无效的 API 网关端点时,返回更友好的响应正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57292228/