似乎
HTTP
的 403
响应被接受为对 API 网关设置上不存在的资源或端点进行的任何调用的规范和正确处理(这篇文章)。
示例:对我的网关上不存在的端点的调用将是;
这将返回
403 forbidden
。这可能相当令人困惑和误导。
我想知道是否有人设法配置他们的 API 网关,以便对不存在的端点/资源的任何调用都会返回我认为是 404 的正确响应?
提前致谢。
编辑
根据
bejos-aws
的建议,我可以覆盖403 Missing Authentication Token
的默认行为,但是,这不会解决我的问题,因为所有有效的403
错误都会返回不正确的404
响应。
另外,我的问题是关于
403 forbidden
,它不存在于 AWS Gateway Response
列表中的默认响应中(即使存在,也无济于事)。
这似乎是不可能的?
目前这不是 API Gateway 的功能。不过,有一个解决方法。使用网关响应,您可以使用
403 Missing Authentication Token
覆盖 404
响应,并提供您想要的任何消息作为响应。
注意,这仅在 API stage 有效时有效:
因此,如果您的 API 部署到名为 v1
的阶段https://{MyGatewayDomain}/api/v1/somepath
调用者提供了错误的阶段
https://{MyGatewayDomain}/api/invalidStage/somepath
然后 API 仍会响应
403 Forbidden
问题在于 API 网关使用授权令牌来处理 AWS 身份验证。
我的解决方案是将授权标头更改为与默认标头不同的内容(
Authorization
)。所以我最终使用 Authorization-Token
代替。
现在我没有将默认的“授权”标头发送到不存在的资源,我得到的是 404 而不是 403。如果我向有效资源发送无效令牌,我会得到带有 403 HTTP 状态代码的正确错误消息。
您只需配置授权者即可使用自定义标头:
所以我的要求是这样的:
curl --location 'https://my-endpoint.com/dev/users' \
--header 'Authorization-Token: MY_TOKEN'