我正在尝试通过AWS API网关调用Lambda函数。当我提到身份验证类型为NONE时,它可以正常工作,但API变成了公共的,任何人都可以访问我的API。 为了使API调用安全,我正在使用身份验证类型AWS_IAM,并将AmazonAPIGatewayInvokeFullAccess策略附加到我的用户上,但出现了这个错误:
{ message: "Missing Authentication Token"}
我不知道我在这里缺少了什么。我正在尝试通过AWS API网关调用Lambda函数。当我提到身份验证类型为NONE时,它可以正常工作,但API变成了公共的,任何人都可以访问我的API。 为了使API调用安全,我正在使用身份验证类型AWS_IAM,并将AmazonAPIGatewayInvokeFullAccess策略附加到我的用户上,但出现了这个错误:
{ message: "Missing Authentication Token"}
我不知道我在这里缺少了什么。aws.export.js
文件中看到与您的API相对应的路径['/items']
。对于仍然遇到这个问题的任何人,我在意识到这一点后感到非常愚蠢,但是在添加API时,我传递了默认的/items
URL。但是我一直使用/api
调用端点。特别感谢Carlos Alberto Schneider
,在阅读您的帖子后,我意识到了我的问题。
为了做出贡献:
我遇到了类似的错误,因为我的返回响应没有像这样包含 'body':
return { 'statusCode': 200, 'body': "如果你替换它,必须包含 body 标签" }
根据我的经验,请检查以下步骤:
在 API 网关端,确保您添加了正确的路径并在您想要的阶段发布资源。对于一些 URL 模式,例如路径参数(/user/{user_id}),需要更加注意进行检查。
确保为此资源配置了正确的选项方法,因为有时是 CORS 导致了这个问题。
在 Lambda 端,确保您指定了正确的处理程序名称作为入口点。
请始终检查您的 Lambda 的 CloudWatch 日志,这可以帮助您识别 Lambda 端的问题。
我遇到了同样的问题,即使我的访问是区域性的而不是私有的,我的方法和API也没有授权。结果发现我调用了根端点"https://azerty.execute-api.eu-west-3.amazonaws.com/dev/",在本地返回了一个json但引发了错误。请确保调用正确的端点,例如"https://azerty.execute-api.eu-west-3.amazonaws.com/dev/hello"。
需要检查的事项:
1. In resources, check for Authorization and API Key if these are required.
2. Redeploy the API, new changes might not reflected.
3. Get the url from stages, directly by clicking on the actions like GET, POST, These will contain the full path urls.
Resources:
LambdaFunction:
Type: AWS::Serverless::Function # More info about Function Resource:
# https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: src/
Handler: app.lambda_handler
Runtime: python3.8
MemorySize: 128
Events:
UpdateItem:
Type: Api
Properties:
Path: /my-endpoint
Method: patch