如何修改AWS API 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
相关产品推荐
相关产品推荐

