如何验证来自外部网站的 POST 请求?

How do I authenticate POST request from external website?

我有一个 Rails 网站,它获取 POSTed 数据并在名为 "create" 的控制器操作中将其保存到数据库中。在我的控制器中,我指定了

protect_from_forgery :except => :create

因为 Rails 网站将从外部应用程序接收此 POSTed 数据(Raspberry Pi 通过 python 发送 POSTed 数据) .

此设置运行良好,但我意识到我已经向任何能够将数据保存到我的数据库的人开放,如果他们知道 Rails url 和参数,而不仅仅是我的 [=26] =].

我是否可以验证 POST 请求,以便我的 Rails 应用仅保存来自我的 Raspberry Pi 的数据?

我唯一能想到的是添加从 Raspberry Pi 传递的 "secret" 值,并在将任何数据保存到数据库之前在我的 Rails 控制器中进行检查.谢谢

Secret 将是一个合适的解决方案。您有多个选项来实施秘密:

  • 调用的附加参数。
  • HTTP Basic-Auth header.
  • Two-way SSL.

只有通过 HTTPS 或专用安全网络进行通信时,前两个才是安全的。

根据具体情况,您还可以考虑一些其他选项,例如仅在 localhost 上侦听并在 2 个服务器之间打开 ssh 隧道以进行调用。