我正在尝试通过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"}
我不知道我在这里缺少了什么。由于一个愚蠢的原因,我浪费了一些时间:
当您创建一个阶段时,显示的链接不包含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
缺少/get-list
当然,您需要检查方法配置是否像这样:
我认为你正在尝试直接访问API链接,这是行不通的,因为API使用IAM角色进行安全保护,而且你必须提供AWS身份验证,即访问密钥和秘密密钥。
使用Postman Chrome扩展程序测试你的API: http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html
我刚遇到了同样的问题,看起来如果资源找不到,它也会显示这个消息。
在我的情况下,我已经更新了API,但忘记重新部署。在将更新后的API部署到我的阶段之后,问题得到了解决。
请确保在 Stages 树中首先单击具体的资源,这将填充一个 URL,其中包含该资源的完整路径(而不仅仅是根路径):full path 。
有关其他原因,请参见 http://www.awslessons.com/2017/aws-api-gateway-missing-authentication-token/
看起来(截至2019年4月)AWS API Gateway出现这种异常的原因有多种——大多数情况下是因为您正在访问API Gateway无法到达的端点,这可能是因为它未部署,或者在不支持该特定HTTP方法的情况下也会发生。
我希望网关发送更合适的错误代码,如HTTP 405方法不支持或HTTP 404未找到,而不是通用的HTTP 403禁止访问。
https://le9dq5l9.execute-api.eu-west-1.amazonaws.com/v1/putdoctorinfo/
\
。它指的是其切割方向,而不是“在 URL 后面”。/
是正斜杠。 - Diego我尝试了以上所有方法,如果您完成以上所有步骤仍然无法解决问题,则:
我认为问题出在当我创建“METHOD REQUEST”时(请参见步骤2如何进入此菜单),我在“Authorization”中选择了“AWS_IAM”,之后在aws测试选项中尝试在“postman”中测试api,然后我理解了在“METHOD REQUEST”中,“Authorization”中,我应该选择“none”。
我更改了它以选择“none”,但是我认为AWS需要重新部署它,就像我所解释的那样。
在文档中找到以下内容:
如果使用AWS_IAM授权,则可以使用Signature Version 4协议签署请求。
您还可以为API生成SDK。
生成所需平台的SDK之后,第6步提到,如果使用AWS凭证,则会对API的请求进行签名:
To initialize the API Gateway-generated SDK with AWS credentials, use code similar to the following. If you use AWS credentials, all requests to the API will be signed. This means you must set the appropriate CORS Accept headers for each request:
var apigClient = apigClientFactory.newClient({
accessKey: 'ACCESS_KEY',
secretKey: 'SECRET_KEY',
});