API Gateway新手求助:REQUEST类型Lambda授权器测试问题
Hey there! 既然你已经把TOKEN类型的Lambda Authorizer跑通了,那REQUEST类型的其实只是参数传递和逻辑处理的差异,我来分享几个实操里踩过的坑和验证技巧:
核对授权器参数配置
先去API Gateway控制台确认你的REQUEST授权器配置,你要传递的header、queryValue1、stageValue1这些参数,是不是已经正确设置了来源(Header/Query String/Stage Variable)和对应的名称?比如你要取某个header,就得在配置里把它加进去,不然API Gateway不会把这个参数传给Lambda。本地验证Lambda逻辑
你可以把AWS测试工具生成的事件Payload复制出来,拿到Lambda控制台做测试。举个典型的REQUEST授权器事件例子:{ "type": "REQUEST", "methodArn": "arn:aws:execute-api:us-west-1:123456789012:xxxxxx/Prod/GET/your-resource", "resource": "/your-resource", "path": "/your-resource", "httpMethod": "GET", "headers": { "x-custom-auth": "xxxx" }, "queryStringParameters": { "queryValue1": "test-value" }, "stageVariables": { "stageValue1": "prod-stage" }, "requestContext": { "accountId": "123456789012" } }把你实际测试的参数填进去跑一遍,看看返回的IAM Policy是不是符合预期——重点看
Effect是Allow还是Deny,还有Resource要和你的API Method ARN完全匹配,差一点都不行。用curl模拟真实请求
当AWS工具测试没问题后,试试用curl发真实请求,比如带header和query参数的命令:curl -v -H 'x-custom-auth: xxxxx' "https://xxxxx.execute-api.us-west-1.amazonaws.com/Prod/?queryValue1=test-value"要是授权失败,去CloudWatch看API Gateway的日志(记得先开启日志功能),能看到授权器有没有被调用、参数传对了没,Lambda返回的内容是什么,这些日志能帮你快速定位问题。
检查IAM权限
最后别忘了确认API Gateway的执行角色有调用这个Lambda授权器的权限,得给角色加lambda:InvokeFunction的权限,不然API Gateway连调用授权器的资格都没有,直接就返回授权失败了。
如果在测试过程中碰到了具体的报错、授权失败或者参数异常的情况,把细节贴出来,咱们再针对性解决~
内容的提问来源于stack exchange,提问作者Joey Kim

