amazon-web-services - 为什么 root 在 API Gateway 中返回 403 错误

标签 amazon-web-services url aws-api-gateway

我有一个非常简单的 lambda 函数,可以促进短 URL 重定向。像这样...

var env = process.env.NODE_ENV

exports.handler = async function (event) {
  var mappings = {
    "": "https://example.com",
    "/": "https://example.com",
    "/article1": "https://example.com/articles/article-title",
    "/podcasts": "https://example.com/podcasts"
  }
  return {
    body: null,
    headers: {
      "Location": mappings[event.path] || "https://example.com/four-oh-four"
    },
    isBase64Encoded: false,
    statusCode: 301
  }
}

除了主页(带或不带斜杠)之外的所有路由的 URL 重定向都很好。我收到了来自 API Gateway(或 Cloudfront)的“缺少身份验证 token ”错误,而不是主页。

冰壶似乎没有显示任何东西... (更新了 curl 代码,糟糕的是我离开了重定向)。
$ curl -v https://short.url/
*   Trying xxx.xx.xxx.xx...
* TCP_NODELAY set
* Connected to short.url (xxx.xx.xxx.xx) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /path/to/ca-certificates.crt
  CApath: /path/to/certs
* (304) (OUT), TLS handshake, Client hello (1):
* (304) (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / xxxxxxxxxxxx-SHA256
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=*.ib.run
*  start date: Apr  5 00:00:00 2019 GMT
*  expire date: May  5 12:00:00 2020 GMT
*  subjectAltName: host "short.url" matched cert's "short.url"
*  issuer: xxx; O=xxx; OU=xxx; CN=xxx
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle xxxxxxxx)
> GET / HTTP/2
> Host: short.url
> User-Agent: curl/7.58.0
> Accept: */*
> 
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 403 
< content-type: application/json
< content-length: 42
< date: Sat, 20 Jul 2019 03:51:44 GMT
< x-amzn-requestid: xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx
< x-amzn-errortype: MissingAuthenticationTokenException
< x-amz-apigw-id: xxxxxxxxxxxxxx_
< x-cache: Error from cloudfront
< via: 1.1 xxxxxxxxxxxxxxxxxxxxxx.cloudfront.net (CloudFront)
< x-amz-cf-pop: xxxxx-xx
< x-amz-cf-id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx===
< 
* Connection #0 to host short.url left intact
{"message":"Missing Authentication Token"}

最佳答案

回复 “缺少身份验证 token ”是误导。
它表明您需要提供一个Token。
真正的错误是,您在 Api 网关中的路由设置不正确。
所以它基本上是一个 未找到路线 来自 api 网关。

您需要使用方法或 any 方法为“/”提供路由,并将其重定向到 Lambda 函数。您可能设置了一个子路由,但没有“/”的路由

Route on /

目前,curl 正在访问 url "/"使用方法 GET 和 Api-Gateway 不知道如何路由这个调用,所以它回答: “缺少身份验证 token ”。

您可以使用每条不存在的路线重现此行为。尝试:例如/sdfsdfsdf。你会得到同样的错误。

设置路线,你应该没问题。

我希望我能帮到你!

多米尼克

关于amazon-web-services - 为什么 root 在 API Gateway 中返回 403 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56998445/

相关文章:

amazon-web-services - 调用CreateMultipartUpload操作时发生错误(AccessDenied): Access Denied

linux - 如何设置将在 aws ec2 ubuntu 16.04 实例上运行 jar 文件的服务

amazon-web-services - AWS Lambda Python RDS Postgres IAM 身份验证的 Conn 配置

php - 如何防止包含的 PHP 脚本更改位置 URL?

aws-api-gateway - 从 CDK 在 HTTP API 网关上启用 IAM 授权

amazon-web-services - 寻找调用多个微服务的API网关技术

javascript - URL 草案规范验证方法

iOS 应用程序安装网址

node.js - API 网关 - ALB : Hostname/IP doesn't match certificate's altnames

amazon-web-services - 在 API 网关部署上更新阶段变量时如何避免停机?