无需身份验证即可将安全的POST数据发送到RESTful API

时间:2016-01-25 10:26:18

标签: ruby-on-rails api rest devise

我正在使用Arduino,我想将数据发送到我的远程或本地Rails RESTful API。在构建其前端时,我可以使用设计和身份验证进行登录。但我想知道当你想让第三方设备将数据发送到后端时会发生什么?

一种选择可能是使用随机生成的长哈希作为密钥,就像Twitter一样(例如客户端密钥和API密钥),这当然不安全,但会降低某人将数据轻松发布到另一个帐户的机会。

但是,如果我是对的,数据将通过http连接发送,以便轻松嗅探。发送温度数据没有问题,但如果有人决定发送RFID ID和名称等,则可能是一个漏洞。

如何将带有POST请求的数据发送到RESTful Rails后端API:

  1. 认证?
  2. 固定?

1 个答案:

答案 0 :(得分:1)

  1. authenticaed?
  2. 您将需要第三方可以呼叫的端点(让他们称他为Zed)。 Zed使用他的电子邮件地址向该端点发送请求(POST)。然后Devise向Zed发送一封电子邮件,其中包含一个包含confirm_token的确认链接。 Zed点击链接,打开一个可以输入密码的页面。输入后,他登录并根据用户ID存储auth_token。随后,他可以使用该auth_token通过在Authorization标头中传递令牌来进一步请求。 ' confirm_token'扔掉(你可以把它设置为在给定的时间段后自动过期)。

    显然这需要Zed手动创建他的帐户并登录。即使你设置了第三方开发者计划'您仍然需要这些开发人员注册并为他们生成令牌,以便他们可以将请求传递给您的api。所有这些当然应该通过https完成。 Devise提供了几乎所有这些功能。

    1. 固定?
    2. HTTPS有助于嗅探'方面。上述方法是安全的,因为只有提供他们有权访问的电子邮件帐户的人才能创建帐户并获取令牌,然后他们可以使用这些令牌以便以后请求。但是,您可以使用手机号码/短信作为第二个因素(谷歌双因素身份验证)。

      1. 没有认证 - 好吧,有点
      2. 我能想到的唯一其他选择是您向已知用户发出签名密钥'。他们使用此密钥签署(加密)他们的请求。由于密钥只应为其所知,并且只能由服务器使用匹配的公钥解密,因此可以通过HTTP发送数据。如果有人嗅到它,他们几乎肯定无法破解密钥以查看真实数据是什么。他们所能做的就是模仿请求,并在DOS攻击中不断向服务器发送相同的请求。

        但是你仍然必须解决你如何验证你是否给予钥匙的问题 - 即你仍然需要以某种方式验证Zed是谁。您是否打算离线执行此操作,然后通过电子邮件发送“已验证的”电子邮件。个人他们的私钥?使用RoR,我仍然建议坚持使用Devise,因为大部分的工作已经为你完成了。