Lambda本地正常但API Gateway发布到DEV阶段报Missing Authentication Token
解决API Gateway调用时"Missing Authentication Token"错误的方案
你遇到的这个问题核心出在API Gateway的部署或配置上,毕竟本地调用Lambda和API Gateway都正常,说明你的Lambda逻辑没问题。我来帮你梳理几个最可能的原因和解决办法:
1. 检查API Gateway的资源与方法配置
- 首先确认你在API Gateway中配置了**根路径"/"**对应的HTTP方法(比如你代码里用到的GET),并且这个方法已经正确关联到你的Lambda函数。
- 发布到DEV阶段时,要确保部署操作包含了这个根资源和方法——有时候如果是新增的资源,部署时没选中的话,阶段里就不会有这个路径的访问权限,导致调用时报错。
- 你当前调用的URL是
https://jbpqyp3142.execute-api.us-east-2.amazonaws.com/DEV,这直接访问的是根路径,所以必须保证根资源的方法是可用且已部署的。
2. 排查授权配置问题
你提到创建authorizer时出错,这很可能是问题的源头:
- 如果你的API不需要授权访问,直接把对应方法的Authorization设置改为
NONE(在API Gateway控制台的方法设置里)。如果之前误选了其他授权类型(比如Lambda Authorizer、Cognito),但配置没完成,API Gateway就会拦截所有请求,返回"Missing Authentication Token"。 - 如果确实需要授权,那得先把authorizer配置正确:比如Lambda Authorizer要确保API Gateway有调用该authorizer函数的权限,并且authorizer函数能返回符合要求的IAM策略文档。
3. 确认部署状态与生效时间
- API Gateway部署后有时候需要1-2分钟才能完全生效,尤其是第一次部署到新阶段。可以去控制台的Deployments页面,检查DEV阶段对应的部署版本是否是最新的,并且包含了你需要的资源和方法。
4. 验证请求方法是否匹配
你的Lambda代码是通过queryStringParameters获取参数的,这说明你应该用GET方法调用API。如果调用时用了POST、PUT等其他方法,API Gateway也会返回这个错误,所以要确保请求方法和你配置的一致。
对Lambda代码的小优化
另外,你的Ruby代码可以简化一下,用Ruby的安全导航和默认值语法,让逻辑更清晰:
require 'json' def lambda_handler(event:, context:) # 用dig和&.安全获取参数,不存在就用默认值1 input = event.dig('queryStringParameters', 'in')&.to_i || 1 triple = (input * 3).to_s # 用字符串插值让代码更易读 { statusCode: 200, body: JSON.generate("Hello from Lambda! Result is #{input} *3 = #{triple}") } end
内容的提问来源于stack exchange,提问作者Michael Durrant
相关产品推荐
相关产品推荐

