You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在API Gateway自定义授权器中设置状态码为406并返回自定义消息?

如何在API Gateway自定义授权器中设置状态码为406并返回自定义消息?

嘿,我来给你捋清楚这个问题的解决办法!其实API Gateway的自定义授权器本身默认拒绝时只会返回401或403,但要返回406状态码加自定义消息,得通过「授权器返回拒绝信号 + 集成响应映射」的组合方式来实现,具体步骤如下:

1. 让自定义授权器返回带标识的拒绝结果

不管你用的是Lambda授权器还是其他类型,当需要触发406场景时,先让授权器返回拒绝决策,同时在context里带上自定义的错误类型和消息,方便后续映射。比如Lambda授权器可以返回这样的JSON结构:

{
  "principalId": "user",
  "policyDocument": {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Deny",
        "Resource": "arn:aws:execute-api:你的区域:账号ID:API ID/阶段/方法/资源路径"
      }
    ]
  },
  "context": {
    "errorType": "NotAcceptable",
    "errorMessage": "请求的内容类型不被支持,请检查后重试"
  }
}

这里的context字段是关键,我们要靠它把自定义消息传递到后续的响应里。

2. 在API Gateway配置集成响应映射

这一步是实现406状态码的核心,因为授权器拒绝后默认返回403,我们要把这个状态码映射成406:

  • 打开API Gateway控制台,找到对应的API、阶段和目标方法。
  • 切换到集成响应标签页(和集成请求在同一栏)。
  • 点击「添加响应」,输入403(授权器拒绝的默认返回码),然后保存。
  • 展开这个403响应的设置项:
    • 把「状态码」修改为406,这就是最终要返回给客户端的状态码。
    • 配置「映射模板」:选择你需要的内容类型(比如application/json),勾选「永远使用模板」,然后输入模板内容,把授权器context里的消息取出来:
      {
        "error": "$context.authorizer.errorType",
        "message": "$context.authorizer.errorMessage"
      }
      
  • 最后一定要重新部署你的API到对应阶段,所有配置才会生效!

3. 测试验证

现在调用你的API,当授权器触发拒绝逻辑时,API Gateway就会返回406状态码,同时带上你自定义的错误消息啦。

要特别提醒的是:API Gateway自定义授权器本身不支持直接返回406状态码,必须通过这种“先返回403拒绝,再映射成406”的方式来实现。另外context里的字段可以根据你的需求自定义,只要在映射模板里对应好就行。

备注:内容来源于stack exchange,提问作者karthik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 15:10:26