为REST API验证大量客户端

时间:2017-01-24 11:12:15

标签: rest authentication

我们在野外部署了大量小型设备,通过REST API与中央服务器进行通信。它将定期发送状态更新和一些传感器数据,并且还会询问服务器是否需要应用任何软件更新。如果有,它会下载等。

我想要一些方法来阻止我的服务器API被未经授权的客户端使用。以下是我所拥有的解决方案以及我预期的问题。这个问题有点开放,但主要是一个最佳实践的问题,我认为是一个常见的情况。

  1. 在服务器上保留一个用户名/密码,然后在https上使用基本身份验证。这很简单但是如果我更改它,我必须以某种方式更改我的设备的所有上的凭据(这个数字低至数千)。这很难可靠。如果没有先改变他们的信誉,设备将如何获得更新也存在问题。
  2. 第二个是为每个设备创建用户名/密码。然后我可以更新单个并管理它们,但服务器上有很多状态,我担心服务器上有这么多数据。
  3. 某种基于自动密钥的系统,设备可以通过该系统请求可过期的密钥,然后将其用于所有交易。如果密钥过期或无效,则该设备无法再连接。这将需要某种设备的ID,我不知道如何处理。
  4. 那么,我该怎么做?

    更新

    在我们的设置中,我们为预先创建的每个设备分配了主机名。一旦设备打开,他们将使用他们的主机名联系服务器,从而进行自我注册。 MAC地址和其他信息作为初始注册握手的一部分传递。

    因此,Noksi在答案(和评论)中提到的“唯一标识符”是主机名。这很容易被欺骗(因为主机名有一个模式)。但是,当设备首次上线时,我们可以获取mac,之后,如果请求来自同一台mac,则只刷新令牌。这开启了第一次发生假登记的可能性。

1 个答案:

答案 0 :(得分:1)

如果有某种方法可以唯一地识别每个设备(类似于MAC地址),那么这将是关键。保留设备的注册表,每个设备都将注册到服务器。服务器将为设备提供令牌并将其(令牌)与注册的设备相关联。设备使用该令牌发出请求。可以根据需要使令牌过期和更新,或者如果需要可以将其列入黑名单。这似乎与拟议选项中的选项3相似。