Go 如何验证服务器到服务器的通信

Go 如何验证服务器到服务器的通信,go,storage,distributed-computing,api-design,server-communication,Go,Storage,Distributed Computing,Api Design,Server Communication,对于我正在尝试构建的东西,我在决定什么是最好的解决方案时遇到了一些问题 在应用程序最简单的形式中,我有一个前端服务器,允许用户上传与他们的帐户关联的文件,例如视频或图像。上载文件表单将上载请求发布到前端服务器,然后前端服务器使用反向代理将请求直接传递到存储服务器的API() 我目前一直在研究的是,验证存储服务器API接收到的请求实际上是从前端服务器的反向代理发送的,而不是直接向存储服务器的API端点发送post请求的最佳方法 任何建议都将不胜感激 有多种方法可以做到这一点: 您可以使用API网关

对于我正在尝试构建的东西,我在决定什么是最好的解决方案时遇到了一些问题

在应用程序最简单的形式中,我有一个前端服务器,允许用户上传与他们的帐户关联的文件,例如视频或图像。上载文件表单将上载请求发布到前端服务器,然后前端服务器使用反向代理将请求直接传递到存储服务器的API()

我目前一直在研究的是,验证存储服务器API接收到的请求实际上是从前端服务器的反向代理发送的,而不是直接向存储服务器的API端点发送post请求的最佳方法


任何建议都将不胜感激

有多种方法可以做到这一点:

  • 您可以使用API网关(例如APIGEE、AWS AI网关等)。网关可以执行请求源验证
  • 您可以让前端应用程序使用OAuth(用于存储服务器)并使用 要在存储服务器上获得身份验证/授权
  • 您可以在服务器之间执行IP白名单&在源代码中允许一组受限的IP
  • 您可以使用MASSL(相互身份验证SSL)b/w服务器来确保只有经过验证的客户端才能访问您的API(可能不是直接针对您的问题,但可以与组合使用)

  • 如果您不需要复杂或更昂贵的解决方案,以下是简单的选项。

    您可以从前端服务器发送某种令牌,以验证请求是否来自正确的服务器。嘿@DhanushGopinath,感谢您的回复。我之前创建了一个会话,该会话创建了一个CSRF令牌,该令牌将在存储服务器端通过同一客户端的会话进行验证,但是,例如,创建一个令牌并通过tcp发送会更好吗?在我传递实际请求之前,请等待一个包含来自存储服务器的正确令牌的ACK,只有在正确的情况下,才能代理文件上传请求?我按照你提到的第一种方式来做。我编写了一个HTTP处理程序来验证它,只有当它有效时,我才会将请求传递给实际的处理程序。第二种方法也可以,只是每次调用都需要发送2个请求。您是控制存储服务器还是第三方服务?它需要暴露给能直接打电话给它的人吗?关于部署的更多细节将有助于回答这个问题。嘿@jxstanford,我确实控制存储服务器。我是分布式计算新手,所以不确定是否有任何最佳实践。存储服务器不必公开,但我不确定如何阻止来自我自己的服务器以外的请求。抱歉,所有这些都太模糊了,这更像是一个学习挑战,试图构建可伸缩的应用程序。嘿@Virgo,谢谢你的评论!自从存储服务器通过表单发送其数据以来,我已经在会话上实施了CSRF预防,但我以前考虑过使用IP白名单的想法,所以我也可以尝试一下!非常好的建议,非常感谢!