访问API网关时缺少身份验证令牌?

ume*_*mer 43 amazon-web-services aws-api-gateway

我试图通过AWS API Gateway调用Lambda函数.当我提到身份验证类型为NONE时它工作正常但API变为公共,任何有url的人都可以访问我的API.为了使API调用安全,我使用身份验证类型AWS_IAM并将AmazonAPIGatewayInvokeFullAccess策略附加到我的用户但收到此错误:

{message:"缺少身份验证令牌"}

我不知道我在这里失踪了什么.

Car*_*der 90

我因为一个愚蠢的理由而失去了一些时间:

创建阶段时,显示的链接不包含URL的资源部分:

API URL: https ://1111.execute-api.us-east-1.amazonaws.com/dev

API + RESOURCE URL https://1111.execute-api.us-east-1.amazonaws.com/dev/get-list

/获取列表不见了

当然,您需要检查方法配置是否如下所示:

在此输入图像描述

  • 承认问题的愚蠢(但常见)原因需要特殊的荣誉.这也让我受益匪浅. (4认同)
  • 一个相关的、愚蠢的事情让我失望:确保你的 HTTP 动词是正确的。我错误地发送了 GET 而不是 POST。似乎您会在任何路径和动词都与 *exactly* 不匹配的路由上收到此错误。 (4认同)
  • 我也遇到了同样的问题并浪费了很多时间。这救了我的命。 (3认同)

小智 26

我认为您直接尝试访问API链接,这不起作用,因为API使用IAM角色进行保护,您必须提供AWS身份验证,即Access密钥和密钥.

使用Postman Chrome扩展程序测试您的API:http: //docs.aws.amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html


vij*_*j34 13

就我而言,我错过了在 api 末尾添加“/”正斜杠。
真是个愚蠢的错误。

https://le9dq5l9.execute-api.eu-west-1.amazonaws.com/v1/putdoctorinfo/


cel*_*epo 12

确保首先单击阶段树中的特定资源,因为这将使用资源的完整路径(而不仅仅是根路径)填充 URL : 在此处输入图片说明

对于其他原因,请参阅http://www.awslessons.com/2017/aws-api-gateway-missing-authentication-token/


Nic*_*las 11

我只是遇到了同样的问题,如果找不到该资源,它似乎也会显示此消息。

就我而言,我已经更新了API,但忘记了重新部署。将更新的API部署到我的平台后,该问题已解决。


小智 7

在文档中找到了这个:

如果使用 AWS_IAM 授权,您将使用签名版本 4 协议签署请求。

签名版本 4 的签名请求


您还可以为您的 API 生成一个 SDK。

如何为 API Gateway 中的 API 生成 SDK

为您选择的平台生成开发工具包后,第 6 步提到如果您使用 AWS 凭证,将对 API 的请求进行签名:

  1. 要使用 AWS 凭证初始化 API Gateway 生成的开发工具包,请使用类似于以下的代码。如果您使用 AWS 凭证,则对 API 的所有请求都将被签名。这意味着您必须为每个请求设置适当的 CORS Accept 标头:

    var apigClient = apigClientFactory.newClient({
      accessKey: 'ACCESS_KEY',
      secretKey: 'SECRET_KEY',
    });
    
    Run Code Online (Sandbox Code Playgroud)


Abi*_*9er 7

确保您创建了资源,然后在其中创建了方法。这就是我的问题。谢谢

在此处输入图片说明


Tec*_*Rik 6

看起来(截至2019年4月),AWS API Gateway出于各种原因引发了此异常-主要是在您遇到API Gateway无法访问的端点时(无论是因为未部署它还是在特定情况下)不支持HTTP方法。

我希望网关发送更合适的错误代码,例如不支持HTTP 405方法或找不到HTTP 404,而不是通用的HTTP 403禁止访问。


小智 6

我尝试了以上所有方法,如果您执行了上述答案中的所有步骤,但没有解决问题,则:

  1. 在左侧菜单上,点击“资源”
  2. 在“资源”的右侧,点击您要测试的 api 方法,例如“POST/GET 等”
  3. 点击“ACTION”列表(它位于第 2 步中的 API 方法的上方)
  4. 选择“DEPLOY API”(请这样做,即使您已经部署了您的 api)
  5. 在“部署阶段”中选择“prod”或您在之前部署中编写的任何内容(它将覆盖您之前的部署
  6. 点击部署

我的原因是,当我创建“方法请求”(请参阅​​第 2 步如何转到此菜单)时,在“授权”中,我在测试 api 后选择“AWS_IAM”,在 aws 测试选项中,我在“邮递员”中尝试”然后我理解在“方法请求”中,在“授权”中,我应该选择“无”

我将其更改为无,但我认为 AWS,需要再次部署它,正如我所解释的


小智 5

有时当您调用错误的 api 时会显示此消息

检查你的api端点


asc*_*ker 5

我今天遇到了同样的问题,因为我使用的是 GET 而不是 POST。通过将邮递员中的方法更改为 POST 修复了问题。