使用AWS Amplify调用Lambda函数时遇403 Access Denied错误求助
AWS Amplify调用API Gateway返回403 Access Denied问题排查
问题现象
- 调用
API.get请求Lambda时,持续返回403 {"message":"Access Denied"} - CloudWatch日志标记为未授权请求
- 功能曾正常运行,回滚API Gateway staging环境旧部署后可恢复正常
- 已验证API URL与staging环境一致,调用时传递查询字符串参数,CORS已启用且API完成部署
- 已配置Cognito用户池授权器(附配置截图:Cognito授权器基本设置、API方法授权关联设置)
代码片段
const authorization = (await Auth.currentSession()).getIdToken().getJwtToken(); console.log({ authorization }); const xmlText = await API.get("AbnLookupApi", "/abnLookup", { headers: { authorization, }, queryStringParameters: { // acnNumber: '30656142479' acnNumber: cbnNumber } }).then((result) => { const xml = parseXml(result); console.log(xml); const error = xml.getElementsByTagName('exceptionDescription'); if(error.length > 0) { processErrors(error); return; } const orgNameElement = xml.getElementsByTagName("organisationName"); console.log(orgNameElement[0].value); setOrgName(orgNameElement[0].value) }).catch((e) => { dispatch(setError(e.message)); console.log(e); });
排查方向
授权器配置差异
- 对比新旧部署中Cognito授权器的用户池ID、客户端ID是否一致
- 确认授权器的Token Source是否为
Authorization(注意HTTP头大小写,部分场景下存在严格匹配要求) - 检查授权器的缓存超时设置,排查是否因令牌缓存失效导致误拦截
API方法授权设置
- 验证新部署中
/abnLookup方法是否正确关联Cognito授权器,未被误改为NONE或其他授权类型 - 检查方法资源策略是否新增限制规则,导致请求被拒绝
- 验证新部署中
JWT令牌有效性
- 解码JWT令牌(可通过jwt.io工具),确认
iss(签发者)、aud(受众)是否与授权器配置匹配 - 检查令牌是否过期,是否包含授权器要求的用户范围(scopes)
- 解码JWT令牌(可通过jwt.io工具),确认
Amplify API调用细节
- 确认
aws-exports.js中的API配置(ID、stage)在新部署后未发生变化 - 尝试将请求头的
authorization改为Authorization(首字母大写),验证是否因头字段大小写导致授权失败
- 确认
内容的提问来源于stack exchange,提问作者Andy Vennells
相关产品推荐
相关产品推荐

