2016-09-23 255 views
9

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

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

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

回答

1

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

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

+0

感谢@Bob的答案, – Umer

3

在文档中发现这一点:

如果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', 
    }); 
    
  • 2

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

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

    15

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

    当你创建一个阶段,显示的链接不包含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方法 –

    相关问题