访问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
如果启用AWS_IAM身份验证,则必须使用AWS Signature Version 4用AWS凭据签署请求。
注意:登录AWS控制台不会自动将您的浏览器的请求签名到您的API。
感谢@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请求将签署:
-
要使用AWS凭证初始化API网关生成的SDK,请使用类似于以下内容的代码。如果您使用AWS凭证,则将对所有对API的请求进行签名。这意味着你必须设置相应的CORS Accept标头为每个请求:
var apigClient = apigClientFactory.newClient({ accessKey: 'ACCESS_KEY', secretKey: 'SECRET_KEY', });
我有同样的问题,似乎也显示了这个消息,如果资源不能被发现。
在我的情况下,我更新了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
的/获取列表失踪
和当然,你需要检查的方法配置是这样的:
需要特殊的荣誉承认愚蠢的(但常见的)问题的原因。这也让我受益匪浅。 –
我犯了这个愚蠢的错误,以及:' - ) –
好吧,但如何做到这一点使用post方法 –
感谢您的回答。我忘记提供访问密钥和密钥。现在,这就像一个冠军一样。你创造了我的一天。 :) – Umer