【问题标题】:How to Verify server to server communication如何验证服务器到服务器的通信
【发布时间】:2016-08-03 05:02:41
【问题描述】:

我在尝试确定什么是我正在尝试构建的东西的最佳解决方案时遇到了一些问题。

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

我目前坚持的是,试图找出验证存储服务器 API 收到的请求实际上是从前端服务器的反向代理发送的最佳方法,而不是某人只是向存储服务器的 API 端点发送一个直接的 post 请求。

任何建议将不胜感激!

【问题讨论】:

  • 您可以从前端服务器发送某种令牌来验证请求来自正确的服务器。
  • 嘿@DhanushGopinath,感谢您的回复。我之前创建了一个会话,该会话创建了一个 CSRF 令牌,该令牌在存储服务器端通过同一个客户端的会话进行验证,但是在我传递实际之前创建一个令牌并通过 tcp 发送它会更好吗?请求,等待来自存储服务器的包含正确令牌的 ACK,如果正确,则代理文件上传请求?
  • 我按照你提到的第一种方式做。我编写了一个 HTTP 处理程序来对其进行身份验证,并且只有当它有效时,我才会将请求传递给实际的处理程序。第二种方法也应该没问题,除了每个调用每次都需要发送 2 个请求。
  • 您控制存储服务器还是第三方服务?它是否需要暴露给可以直接调用它的人?关于部署的更多细节将有助于解决这个问题。
  • 嘿@jxstanford,我确实控制着存储服务器。我是分布式计算的新手,所以不确定任何最佳实践。存储服务器不必暴露,但我不确定如何阻止它来自我自己的服务器以外的请求。抱歉,所有这些都非常模糊,这更像是一个学习挑战,尝试构建可扩展的可扩展应用程序。

标签: go storage distributed-computing api-design server-communication


【解决方案1】:

有多种方法可以做到:

  1. 您可以使用 API 网关(例如 APIGEE、AWS AI 网关等)。网关可以进行请求来源验证。
  2. 您可以让前端应用使用 OAuth(用于存储服务器)并使用 在存储服务器上获得身份验证/授权
  3. 您可以在服务器之间进行 IP 白名单,并在源中允许一组受限 IP
  4. 您可以使用 MASSL(相互验证的 SSL)黑白服务器来确保只有经过验证的客户端才能访问您的 API(可能不直接解决您的问题,但可以结合使用)

如果您不需要复杂或更昂贵的解决方案,这些是简单的选择。

【讨论】:

  • 嘿@Virgo,感谢您的评论!我已经在会话中实现了 CSRF 预防,因为存储服务器正在通过表单发送它的数据,但是我之前考虑过使用 IP 白名单的想法,所以我也可以尝试一下!很好的建议,非常感谢!
猜你喜欢
  • 2019-12-24
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 2016-05-20
相关资源
最近更新 更多