API 网关配置 returns 403
API Gateway configuration returns 403
我配置并部署了 API Gateway
。如果我向其暂存端点之一发出 GET 请求,例如 https://1234567890.execute-api.us-east-1.amazonaws.com/dev/doc
,我会收到 200 OK
响应。
如果我查看 Custom Domain Names
部分并将那里找到的 URL 替换到我的请求中,例如 abcdefghijkl-f4cwy0d1u5.execute-api.us-east-1.amazonaws.com
生成 https://abcdefghijkl-f4cwy0d1u5.execute-api.us-east-1.amazonaws.com/dev/doc
,我得到 403 Forbidden
.
我是否认为我应该能够向域名发出请求 - 从而在 CNAME 记录中使用 API 的自定义域名 - 或者 403 是否表明缺少特定的配置项?
您可以在此处找到一些与您的 403 错误一起出现的响应 headers:https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-troubleshoot-403-forbidden/
这可能会帮助您找出您遇到的错误!
TL;DR: 当使用 API 网关获取 403 Forbidden
并使用 Custom domain name
时,重要的是 trim阶段名称,因为 API 网关将自定义名称路由到该阶段。
使用@leoandreotti 提供的 the documentation 我能够识别响应 header:
x-amzn-ErrorType: ForbiddenException
为此,文档指出:
Invoking a REST API that has a custom domain name using the default
execute-api endpoint - The caller uses the default execute-api
endpoint to invoke a REST API after disabling the default endpoint.
这让我想起了 header 同事推荐我使用的 Host
header.
所以,我将 header 添加回请求并得到:
x-amzn-ErrorType: MissingAuthenticationTokenException
文档说明:
Resource path doesn't exist - A request with no "Authorization" header
is sent to an API resource path that doesn't exist.
但是路径/dev/doc
绝对存在。然后我意识到 /dev
部分实际上是 stage 名称。
所以我 trim 从路径中提取 /dev
部分并得到 200 OK
- 然后我删除了 Host
header 并且还得到了 200 OK
!
谢谢@leoandreotti
我配置并部署了 API Gateway
。如果我向其暂存端点之一发出 GET 请求,例如 https://1234567890.execute-api.us-east-1.amazonaws.com/dev/doc
,我会收到 200 OK
响应。
如果我查看 Custom Domain Names
部分并将那里找到的 URL 替换到我的请求中,例如 abcdefghijkl-f4cwy0d1u5.execute-api.us-east-1.amazonaws.com
生成 https://abcdefghijkl-f4cwy0d1u5.execute-api.us-east-1.amazonaws.com/dev/doc
,我得到 403 Forbidden
.
我是否认为我应该能够向域名发出请求 - 从而在 CNAME 记录中使用 API 的自定义域名 - 或者 403 是否表明缺少特定的配置项?
您可以在此处找到一些与您的 403 错误一起出现的响应 headers:https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-troubleshoot-403-forbidden/
这可能会帮助您找出您遇到的错误!
TL;DR: 当使用 API 网关获取 403 Forbidden
并使用 Custom domain name
时,重要的是 trim阶段名称,因为 API 网关将自定义名称路由到该阶段。
使用@leoandreotti 提供的 the documentation 我能够识别响应 header:
x-amzn-ErrorType: ForbiddenException
为此,文档指出:
Invoking a REST API that has a custom domain name using the default execute-api endpoint - The caller uses the default execute-api endpoint to invoke a REST API after disabling the default endpoint.
这让我想起了 header 同事推荐我使用的 Host
header.
所以,我将 header 添加回请求并得到:
x-amzn-ErrorType: MissingAuthenticationTokenException
文档说明:
Resource path doesn't exist - A request with no "Authorization" header is sent to an API resource path that doesn't exist.
但是路径/dev/doc
绝对存在。然后我意识到 /dev
部分实际上是 stage 名称。
所以我 trim 从路径中提取 /dev
部分并得到 200 OK
- 然后我删除了 Host
header 并且还得到了 200 OK
!
谢谢@leoandreotti