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

使用Serverless时如何为API授权器指定自定义错误状态码?

解决方案:将自定义授权器失败的返回码改为410

要实现这个需求,你只需要在Serverless配置中添加一个关键配置项,同时确保自定义授权器返回标准的拒绝策略即可,操作起来很简单:

步骤1:确保自定义授权器返回标准拒绝结构

首先,你的authorizerFunc在授权失败时,需要返回符合API Gateway要求的拒绝策略文档。以Node.js为例,示例代码如下:

exports.handler = async (event) => {
  // 这里替换成你的实际授权校验逻辑(比如token验证、权限检查等)
  const isValid = false; // 模拟授权失败场景

  if (!isValid) {
    return {
      principalId: 'unauthorized-user',
      policyDocument: {
        Version: '2012-10-17',
        Statement: [
          {
            Action: 'execute-api:Invoke',
            Effect: 'Deny',
            Resource: event.methodArn // 明确拒绝当前请求的API资源
          }
        ]
      },
      context: {
        errorMsg: 'Invalid or missing authorization credentials'
      }
    };
  }

  // 授权通过时返回允许策略(保留原有逻辑即可)
  return {
    principalId: 'valid-user',
    policyDocument: {
      Version: '2012-10-17',
      Statement: [
        {
          Action: 'execute-api:Invoke',
          Effect: 'Allow',
          Resource: event.methodArn
        }
      ]
    }
  };
};

步骤2:在Serverless配置中指定授权失败返回码

在getRoles函数的HTTP事件配置里,直接添加authorizationFailureOverride: 410,就能让API Gateway在授权失败时返回410,而非默认的401。如果需要自定义410的响应体,还可以补充responses配置。修改后的完整配置如下:

functions:
  authorizerFunc:
    handler: authorize.handler
  # Roles API
  getRoles:
    handler: allrolesget.handler
    events:
      - http:
          path: /
          method: get
          cors: true
          integration: lambda
          authorizer:
            name: authorizerFunc
            resultTtlInSeconds: 0
            identitySource: method.request.header.Authorization # 补全你的实际身份信息来源
          # 核心配置:指定授权失败返回410
          authorizationFailureOverride: 410
          # 可选:自定义410状态码的响应内容(保持CORS头一致避免跨域问题)
          responses:
            410:
              description: "Authorization Failed"
              headers:
                Access-Control-Allow-Origin: "'*'"
              template:
                application/json: '{"error": "Authorization failed, please check your credentials"}'

原理说明

authorizationFailureOverride是Serverless Framework针对API Gateway提供的扩展配置,它会直接告诉网关:当自定义授权器返回拒绝(Deny)策略时,替换默认的401状态码为你指定的410。这样客户端收到410时,就能明确识别这是授权失败场景,执行对应的处理逻辑。

注意事项

  • 确认identitySource配置正确,它指定了授权器从哪里获取身份信息(比如请求头、查询参数等);
  • 自定义响应体时,务必保持CORS头和原有配置一致,避免跨域请求失败;
  • 部署后记得测试:发送一个携带无效凭证的请求,验证是否返回410状态码和你定义的响应内容。

内容的提问来源于stack exchange,提问作者suku

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:36:32