在 AWS ApiGateway 中更改响应“授权标头中不是有效的键=值对(缺少等号)”

Vla*_*ady 6 amazon-web-services

我读过其他类似的帖子,其中包含完全相同的错误消息,但我的问题不同。

我在https://XXXXXXXX.execute-api.us-east-1.amazonaws.com/xxxx/users中有一个 AWS ApiGateway (从现在起我将其称为/users)。

我已经使用 Cognito 授权实现了 ApiGateway 到 Lambda 脚本,它们工作没有问题,例如:

  • /users/me-> 返回当前登录用户的数据

问题是当我在 ApiGateway 中调用不存在的路由时,例如:

  • /users/mine123-> 它返回

{“message”:“授权标头中的‘my-cognito-user-id-token’不是有效的键=值对(缺少等号):‘Bearer my-cognito-user-id-token’。” }

我的问题是...当 ApiGateway 中的路由不存在时,有没有办法返回 NotFound 或 BadRequest 错误?

我认为可以实现任何资源,但是,有没有一种“干净”的方法可以在没有任何资源的情况下实现它?


编辑1:

我也尝试了 Api Gateway 响应。我设置了自定义响应,状态错误代码 404 表示“未找到资源”,但 Api Gateway 仍然返回403 Forbidden

找不到资源配置

编辑2

我也已经配置了4XX响应:

资源 4XX

API Gateway 总是返回 403 错误并显示此消息(正如一般 4XX 错误所预期的那样),但是我认为这没有意义,因为Forbidden这不是一个真正的错误,而是一个NotFoundorBadRequest错误。

例如,

他们都没有回来403 Forbidden

Bal*_*ala 14

{ "message": "token not a valid key=value pair Authorization header: 'Bearer token'.当“资源路径不存在”且状态为 403且响应标头为“x-amzn-ErrorType”=“IncompleteSignatureException”时,会引发错误消息

带有“Authorization”标头的请求被发送到不存在的 API 资源路径。

我们可以在“网关响应”部分自定义响应正文。对于这种情况,似乎没有特定的网关响应,例如未经授权、无效签名等,因此我们需要配置Default 4XX

我们可以更新status codeResponse Templates. 与成功请求过程中的集成响应不同,错误网关响应模板不支持完整的 VTL模板,而仅支持简单的占位符。

配置示例application/json

{"message":"Invalid Resource","type": "$context.error.responseType","stage": "$context.stage"}
Run Code Online (Sandbox Code Playgroud)

截屏

将返回

{
    "message": "Invalid Resource",
    "type": "DEFAULT_4XX",
    "stage": "qa"
}
Run Code Online (Sandbox Code Playgroud)