访问API Gateway时出现“缺少身份验证令牌”?

218

我正在尝试通过AWS API网关调用Lambda函数。当我提到身份验证类型为NONE时,它可以正常工作,但API变成了公共的,任何人都可以访问我的API。 为了使API调用安全,我正在使用身份验证类型AWS_IAM,并将AmazonAPIGatewayInvokeFullAccess策略附加到我的用户上,但出现了这个错误:

{ message: "Missing Authentication Token"}
我不知道我在这里缺少了什么。

我相信这里大多数,如果不是全部的答案也同样适用于任何其他AWS服务(例如:DynamoDB),只要它们映射在给定的API Gateway资源端点后面。假设这是真的,API Gateway是操作接口(而不是AWS服务资源)。 - cellepo
11
错误是因为访问了错误的终端节点所导致的。 - Rexben
5
或者是使用错误的方法,比如GET和POST混淆了右端点等。 - RaisinBranCrunch
1
我的问题不同,哈哈,我忘记将API部署到暂存区,因此对我无效。 xD - keidakida
我花了太长时间才意识到在 API 网关中进行更改后总是需要部署,这就是我遇到同样错误的原因。 - Pete
显示剩余2条评论
27个回答

0
首先,检查您在Lambda函数中创建的API是否已在AWS项目中注册。为此,请转到AWS控制台中的API网关。如果未注册,请进行注册。这是此问题的主要原因。
您甚至可以在aws.export.js文件中看到与您的API相对应的路径['/items']
您的API必须存在于其中,否则它将不会将安全令牌附加到请求中。只需在控制台中的项目云逻辑中注册即可解决此问题。
如果存在,则使用上述提到的解决方案
http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html

0

对于仍然遇到这个问题的任何人,我在意识到这一点后感到非常愚蠢,但是在添加API时,我传递了默认的/items URL。但是我一直使用/api调用端点。特别感谢Carlos Alberto Schneider,在阅读您的帖子后,我意识到了我的问题。


0

为了做出贡献:

我遇到了类似的错误,因为我的返回响应没有像这样包含 'body':

return { 'statusCode': 200, 'body': "如果你替换它,必须包含 body 标签" }


0

根据我的经验,请检查以下步骤:

  1. 在 API 网关端,确保您添加了正确的路径并在您想要的阶段发布资源。对于一些 URL 模式,例如路径参数(/user/{user_id}),需要更加注意进行检查。

  2. 确保为此资源配置了正确的选项方法,因为有时是 CORS 导致了这个问题。

  3. 在 Lambda 端,确保您指定了正确的处理程序名称作为入口点。

  4. 请始终检查您的 Lambda 的 CloudWatch 日志,这可以帮助您识别 Lambda 端的问题。


0

我遇到了同样的问题,即使我的访问是区域性的而不是私有的,我的方法和API也没有授权。结果发现我调用了根端点"https://azerty.execute-api.eu-west-3.amazonaws.com/dev/",在本地返回了一个json但引发了错误。请确保调用正确的端点,例如"https://azerty.execute-api.eu-west-3.amazonaws.com/dev/hello"。


0

需要检查的事项:

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.

0
在我的情况下,我尝试执行一个“UPDATE”类型的请求,但是在我的AWS SAM模板中,我有一个“PATCH”类型的请求:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接