AWS API网关 - {"message":"缺少身份验证令牌"}

3
我的Lambda函数在本地工作并返回JSON。
我的API Gateway在本地工作,即调用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 Gateway:

enter image description here


我试图创建一个“授权者”,但是遇到了以下错误:

enter image description here


我需要创建一个“授权者”吗? - undefined
4个回答

3
您正在向端点的根URL发出请求,这是亚马逊提供的链接,但它不会起作用,因为您需要指定您要请求的资源。当您打开阶段并查找其中的URL时,您会看到这一点,即:

enter image description here

在编程中添加资源路径,例如:

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


除非您的使用情况需要,否则不需要使用授权器。了解有关API Gateway访问控制的更多信息: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发出请求,但未指定您正在请求的资源。当搜索您收到的错误时,排名最高的Stack Overflow结果解释了问题: https://dev59.com/h1kS5IYBdhLWcg3wlnvg#43285585


请你看一下这个,请访问以下链接: https://stackoverflow.com/questions/62894455/messagemissing-authentication-token-while-accessing-lambda-through-api-en - undefined
谢谢你的回答!你指出来的时候,一切都变得清晰明了。 - undefined

1
当您的API网关需要API密钥时,您必须在请求标头中传递它。 x-api-key: yourkey
您可以在API的资源 - POST - 方法执行中检查。

0

创建资源和方法时,请使用 IAM 角色。如果您使用 IAM 角色,将会更容易。上述答案是正确的。我只是提供了一个对我来说更容易的建议。


0
如果您没有使用任何授权方式,那么"缺少身份验证令牌"表示URL可能不正确或缺失。
  1. 如果您没有传递正确或完整的阶段和资源名称,URL可能是不正确的。
  2. 如果您使用了错误的HTTP方法来调用API资源(例如,您使用GET而不是POST),也会出现此问题。
  3. 如果您的API未部署最新更改,也可能导致缺失问题。
从控制台测试API并不总是验证配置是否正确的最佳方式。建议尝试使用Postman应用程序或curl命令进行测试。
curl -v -X $HTTP_METHOD https://$API_ID.execute-api.$AWS_REGION.amazonaws.com/$STAGE_NAME/$RESOURCE_NAME

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接