我们开发了一个与第 3 方服务集成的 Web 应用程序。第 3 方服务的集成之一会调用我们的 API 服务器来更新某些状态(类似于支付网关)。
最初我们服务器上的 API 没有身份验证,所以我们认为我们应该进行一些检查以验证回调是真实的。
第三方服务已经完成了我们的项目,拒绝修改他们这边的代码,而且他们的服务器有动态IP,所以我们无法通过IP加入白名单。他们的工程师建议我们将他们的主机名列入白名单。
我们考虑过获取源IP和反向DNS。此方法仅在某些情况下有效,并且不适用于云 VM 的自定义域。解析的主机名将是 VM 的主机名而不是自定义域。
他们的工程师听起来这是一种常见的做法并且很容易实施,我们是否遗漏了什么?我们可以完全控制防火墙、DNS 记录和 API 代码。
我认为常见的做法是为您的案例添加相互认证。你的回调接口看起来像一个开放的api,你需要验证通过AES或RSA算法加密的回调参数签名。 如果第 3 方坚持不更改代码,他们可以添加具有固定 IP 的代理服务器。