You need to enable JavaScript to run this app. 如何修改AWS API Authorizer返回的错误信息与状态码?
优惠活动
大模型
产品
解决方案
定价
更多

如何修改AWS API Authorizer返回的错误信息与状态码?

API Gateway Lambda Authorizer 自定义错误返回方案

方案1:配置API Gateway网关响应(无代码侵入)

这是成本最低的方案,无需修改现有Authorizer逻辑,直接在API网关层统一配置错误返回规则:

  • 进入对应API的Gateway控制台,左侧菜单栏选择 网关响应
  • 在响应类型列表中找到「访问被拒绝(403)」,你当前遇到的显式Deny返回就属于该类型;如果需要覆盖Token无效、缺失等场景,也可以同时配置「未经授权(401)」类型
  • 点击编辑,先设置你需要的HTTP状态码,再在响应模板栏选择application/json,填入自定义的返回体内容,例如:
{
    "code": 401001,
    "msg": "登录凭证已过期,请重新登录",
    "data": null
}
  • 保存配置后,将API部署到对应生效阶段即可,所有关联该API的Authorizer错误返回都会自动生效。

方案2:Lambda Authorizer返回自定义错误(适配多错误场景)

如果你需要针对Token过期、权限不足、Token格式错误等不同场景返回不同的提示,可以直接修改Authorizer代码抛出自定义错误:

import json, jwt
from datetime import datetime

def lambda_handler(event, context):
    timestamp = datetime.timestamp(datetime.now())
    # 捕获JWT解析的不同错误
    try:
        decode_data=jwt.decode(jwt=event['authorizationToken'], key="", algorithms=["RS256"], options={"verify_signature": False})
    except jwt.ExpiredSignatureError:
        raise Exception("Unauthorized: Token已过期")
    except jwt.InvalidTokenError:
        raise Exception("Unauthorized: Token格式非法")

    # 权限校验逻辑
    if timestamp < decode_data['exp'] and decode_data['custom:user'] == 'Customer':
        return { 
            "principalId": "abc123", 
            "policyDocument": { 
                "Version": "2012-10-17", 
                "Statement": [{"Action": "*", "Resource": "*", "Effect": "Allow"}] 
            }
        }
    # 权限不足场景抛错
    raise Exception("Forbidden: 当前用户无访问权限")

配置说明:

  • 抛出的异常信息前缀如果带Unauthorized,API Gateway会默认返回401状态码;前缀带Forbidden默认返回403状态码
  • 你也可以在网关响应中配置正则匹配规则,根据异常的不同内容返回自定义的状态码和响应体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 19:24:00