AWS API Gateway - 找不到资源时出现错误 403

问题描述 投票:0回答:2

似乎

HTTP
403
响应被接受为对 API 网关设置上不存在的资源或端点进行的任何调用的规范和正确处理(这篇文章)。

示例:对我的网关上不存在的端点的调用将是;

  • 获取——https://{{MyGatewayDomain}}/api/v1/blah

这将返回

403 forbidden
。这可能相当令人困惑和误导。

我想知道是否有人设法配置他们的 API 网关,以便对不存在的端点/资源的任何调用都会返回我认为是 404 的正确响应?

提前致谢。

编辑

根据

bejos-aws
的建议,我可以覆盖
403 Missing Authentication Token
的默认行为,但是,这不会解决我的问题,因为所有有效的
403
错误都会返回不正确的
404
响应。

另外,我的问题是关于

403 forbidden
,它不存在于 AWS
Gateway Response
列表中的默认响应中(即使存在,也无济于事)。

这似乎是不可能的?

aws-api-gateway swagger-ui
2个回答
0
投票

目前这不是 API Gateway 的功能。不过,有一个解决方法。使用网关响应,您可以使用

403 Missing Authentication Token
覆盖
404
响应,并提供您想要的任何消息作为响应。

注意,这仅在 API stage 有效时有效:

因此,如果您的 API 部署到名为 v1

的阶段

https://{MyGatewayDomain}/api/v1/somepath

调用者提供了错误的阶段

https://{MyGatewayDomain}/api/invalidStage/somepath

然后 API 仍会响应

403 Forbidden


0
投票

问题在于 API 网关使用授权令牌来处理 AWS 身份验证。

我的解决方案是将授权标头更改为与默认标头不同的内容(

Authorization
)。所以我最终使用
Authorization-Token
代替。

现在我没有将默认的“授权”标头发送到不存在的资源,我得到的是 404 而不是 403。如果我向有效资源发送无效令牌,我会得到带有 403 HTTP 状态代码的正确错误消息。

您只需配置授权者即可使用自定义标头:

所以我的要求是这样的:

curl --location 'https://my-endpoint.com/dev/users' \
--header 'Authorization-Token: MY_TOKEN'
© www.soinside.com 2019 - 2024. All rights reserved.