aws API网关-{“消息”:“缺少身份验证令牌”}

时间:2019-11-09 12:37:58

标签: aws-lambda aws-api-gateway

我的lambda在本地工作并返回JSON。
我的API网关在本地工作,即调用lambda并返回JSON。

但是,当我将API发布到DEV阶段,然后尝试使用调用URL时-https://jbpqyp3142.execute-api.us-east-2.amazonaws.com/DEV我得到

{"message":"Missing Authentication Token"}

Lambda:

require 'json'

def lambda_handler(event:, context:)
  if event['queryStringParameters'].nil?
    input = 1
  else
    if event['queryStringParameters']['in']
      input = event['queryStringParameters']['in'].to_i
    else
      input = 1
    end
  end
  triple = (input * 3).to_s
  { statusCode: 200, body: JSON.generate("Hello from Lambda! Result is " + input.to_s + " *3 = " + triple) }
end

API网关:

enter image description here


我尝试创建一个“授权者”,但出现以下错误:

enter image description here

3 个答案:

答案 0 :(得分:1)

您正在向端点的根URL发出请求,该请求是Amazon提供的链接,但是由于您需要指定所请求的资源,因此它不起作用。打开舞台并在其中查找URL时,您会看到此信息,即

enter image description here

添加资源的路径,例如

https://jbpqyp3142.execute-api.us-east-2.amazonaws.com/DEV/tripler


除非您想要一个用例,否则您不需要授权者。了解有关API网关访问控制的更多信息:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html

我认为您的问题可能是您没有使用SigV4签署请求:https://docs.aws.amazon.com/apigateway/api-reference/signing-requests/

但是,在编写此答案之前,我进行了一次快速搜索,以查看是否有更简单的东西可能遗失了。似乎您是在向端点的根URL发出请求,但未指定所请求的资源。搜索收到的错误时,堆栈顶部溢出的结果说明了此问题: https://stackoverflow.com/a/43285585/715780

答案 1 :(得分:0)

当您的api网关需要API密钥时,您必须在请求标头中传递它。 x-api-key:yourkey

您可以在“资源-POST-API的方法执行”中进行检查。

答案 2 :(得分:0)

如果您没有使用任何类型的授权,则“缺少身份验证令牌”表示URL不正确或丢失。

  1. 如果未传递正确或完整的阶段和资源名称,则可能是错误的。

  2. 如果您使用错误的HTTP方法来调用API资源(即您使用的是GET而不是POST),也会发生这种情况。

  3. 如果未使用最新更改部署您的API,则可能会丢失问题。

从控制台测试API并非始终是验证配置是否正确的最佳方法。尝试使用Postman application或curl-

curl -v -X $HTTP_METHOD https://$API_ID.execute-api.$AWS_REGION.amazonaws.com/$STAGE_NAME/$RESOURCE_NAME