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

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

问题描述:

我想通过AWS API网关调用Lambda函数。 当我提到身份验证类型为NONE时,它可以正常工作,但API会公开,任何具有url的人都可以访问我的API。 为了使API调用的安全,我使用的身份验证类型AWS_IAM和 还附上AmazonAPIGatewayInvokeFullAccess政策,我的用户,但得到这个错误:访问API网关时缺少身份验证令牌?

{消息:“缺少身份验证令牌”}

我不知道是什么我在这里失踪。

我想你是直接试图访问API链接,这是行不通的,因为API使用IAM角色,您必须确保提供AWS认证,即访问密钥和密钥。

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

+0

感谢您的回答。我忘记提供访问密钥和密钥。现在,这就像一个冠军一样。你创造了我的一天。 :) – Umer

如果启用AWS_IAM身份验证,则必须使用AWS Signature Version 4用AWS凭据签署请求。

注意:登录AWS控制台不会自动将您的浏览器的请求签名到您的API。

+0

感谢@Bob的答案, – Umer

在文档中发现这一点:

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

Signing request with Signature Version 4


您也可以为您的API的SDK。

How to generate an SDK for an API in API Gateway

一旦你生成你所选择的平台SDK,步骤6中提到,如果您正在使用AWS凭证,到API请求将签署:

  1. 要使用AWS凭证初始化API网关生成的SDK,请使用类似于以下内容的代码。如果您使用AWS凭证,则将对所有对API的请求进行签名。这意味着你必须设置相应的CORS Accept标头为每个请求:

    var apigClient = apigClientFactory.newClient({ 
        accessKey: 'ACCESS_KEY', 
        secretKey: 'SECRET_KEY', 
    }); 
    
启动=“6”>

我有同样的问题,似乎也显示了这个消息,如果资源不能被发现。

在我的情况下,我更新了API,但忘记重新部署。将更新后的API部署到我的舞台后,问题得到解决。

我已经失去了一段时间,一个愚蠢的理由:

当你创建一个阶段,显示的链接不包含URL的资源部分:

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

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

/获取列表失踪

和当然,你需要检查的方法配置是这样的:

enter image description here

+0

需要特殊的荣誉承认愚蠢的(但常见的)问题的原因。这也让我受益匪浅。 –

+0

我犯了这个愚蠢的错误,以及:' - ) –

+0

好吧,但如何做到这一点使用post方法 –