【问题标题】:AWS Api Gateway + Lambda + custom domain (Route53) Missing Authentication Token issueAWS Api Gateway + Lambda + 自定义域 (Route53) 缺少身份验证令牌问题
【发布时间】:2017-12-07 10:07:35
【问题描述】:

我知道这里已经发布并回答了许多类似的问题,但没有一个与我所经历的完全一样。

我有一个处理传入请求(GET 和 POST)的 Lambda 函数。我还设置了一个 api 网关作为面向公众的端点。另外,我在Set up Custom Domain Name for API Host Name之后设置了自定义域

测试调用在 lambda 和 api 网关控制台中均有效。一切都可以使用调用 URL,但不适用于我设置的自定义域。

这里有更多细节:

调用 URL(工程):

https://{api gateway id}.execute-api.us-west-2.amazonaws.com/prod/endpoint

自定义域 endpint(不起作用):

https://api.{my domain}.com/endpoint

基本路径映射:

/endpoint   endpoint:prod

所有方法验证:

Authorization None
API Key Not required

Route53:

A record as alias that points api.{my domain}.com to the cloudfront distribution domain name as alias target. 

如果有人知道这里发生了什么,我将不胜感激。

【问题讨论】:

  • 您是否还设置了指向CloudFront-DistributionRoute53-Record-Set
  • @MaiKaY 是的。我有一条 A 记录作为 api.{my domain}.com 的别名。别名目标是 CloudFront 分配域名
  • 我想您需要将您的BasePath Mapping 更改为:/ endpoint:prod。或者尝试使用现有的BasePath Mapping 访问https://api.{my domain}.com
  • @jlai 您能否提及您收到的错误或您的请求未到达 API 网关

标签: amazon-web-services lambda aws-api-gateway amazon-route53


【解决方案1】:

我发现问题在于误解了基本路径映射的工作原理。

我所有的配置都是正确的。

我的API资源不在/下,而是在/endpoint下

要使用自定义域,而不是访问https://api.{my domain}.com/endpoint,它需要转到https://api.{my domain}.com/endpoint/endpoint

当然这是愚蠢和多余的。

我有两个选择。我要么设置到 / 而不是 /endpoint 的基本路径映射,要么我可以只使用 API 资源 / 而不是 /endpoint。

我选择后者,因为如果将基本路径映射设置为 /,我的 api.{my domain}.com 将只能托管一个 API(我仍然可以使用同一 API 下的资源,但为什么要浪费额外的抽象层?)。

这似乎是垃圾,但我仍然很高兴我想通了。

【讨论】:

  • 不清楚为什么您会期望 /endpoint 的基本路径和名为 /endpoint 的资源会导致任何行为其他,而不是要求请求转到 @ 987654325@,因为资源是通过基本路径+资源访问的。
  • 我实际上使用 lambda 的模板设置了 api 网关,模板自动将其放置在 API 的名称下,而不是 API 的根目录下。这是我第一次使用它,所以我没想到会出现这种行为。我预计资源是在 API 的根目录下创建的,这意味着 API 的名称应该只是 API 的名称,并且根默认用于第一个资源。
  • 我明白你的意思了。
  • 我遇到了同样的问题,也没有意识到 lambda 在网关中创建了一个嵌套资源。我收到 {"message":"Missing Authentication Token"}
  • 是的,杰莱。我同意你。我的 api 是“abcd12345.execute-api.us-east-1.amazonaws.com/Dev/resource”但是当我创建自定义 api 域名并只添加阶段而不是路径时,我只能通过 example.com 访问它/资源。它真的很傻。
【解决方案2】:

几年前我遇到过同样的问题,并通过从 URL 中删除“舞台”名称解决了这个问题。

  1. 网关 API 的 URL 如下所示:
https://{id}.execute-api.{region}.amazonaws.com/{stage}/todos
  1. 如果您已将自定义域 https://api.xxx.com 路由到网关 API {apiName}:{stage},则如下所示:
https://api.xxx.com

path: /
target: {apiName}:{stage}
  1. 最后,正确的调用方式是去掉stage名:
// **remove stage name!!!!**

// Right
https://api.xxx.com/todos

// Wrong
https://api.xxx.com/{stage}/todos

【讨论】:

  • 天哪!这正是我的问题!!! I wrote about it here. 基本上艺名也换成自定义域名了。 (注:我希望你的答案更清楚一点,因为我第一次阅读时没有得到它。)
【解决方案3】:

另一个原因可能是您的用户虽然是管理员,但没有该死的CloudFrontFullAccess 权限!我只花了几个小时,因为我依靠serverless 为我做这件事,但它在另一个具有不同凭据的项目上完美运行。所以仔细检查文章! https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html

【讨论】:

    猜你喜欢
    • 2020-09-18
    • 2021-08-28
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 2019-03-25
    相关资源
    最近更新 更多