如何在物联网平台验证设备?

物联网 安全 验证 供应
2021-06-21 13:48:41

我正在构建一个 IoT 平台,该平台应该通过 REST API 从 Raspberry Pi 接收数据。假设该平台将来可以用于管理多个用户的多个设备,我的问题是,应该如何将设备正确(且安全地)分配给拥有该设备的用户的帐户。最简单的解决方案是发布链接到用户和设备的访问令牌,然后手动(例如使用蓝牙应用程序)部署到设备上。每当设备向服务器发送数据时,访问令牌都会确保数据与正确的用户帐户相关联。

但是,这种方法不会阻止用户手动登录到服务器,例如使用 python 脚本。我正在考虑一种私钥/公钥机制,它可以确保只有具有正确私钥的设备才能将数据发布到服务器。我也有关于如何实现这一点的想法,但我的问题是,这真的需要吗?如果用户可以手动(没有设备)登录到服务器,是否有问题?如果 API 帖子包含有效的访问令牌,那么将哪些数据发送到服务器是否重要?

2个回答

有一种简单的方法可以防止您的用户在其 RPI 之外使用您的 REST API。它将按以下方式工作:

  1. 您通过不与用户共享的 root 密码保护 RPI 的文件系统。文件系统也必须加密。
  2. 您不是为用户分配访问令牌,而是分配安全密钥。
  3. 用户作为非 root 用户将安全密钥放在 RPI 上。
  4. RPI 使用安全密钥和请求消息正文的任何​​唯一部分(例如:请求计数器)为每个 API 请求计算唯一令牌。例如:唯一的令牌可以是与计数器连接的安全密钥的散列。
  5. 由于服务器知道安全密钥和计算唯一令牌的方式,因此它可以验证每个令牌。
  6. 由于用户不知道唯一令牌是如何计算的,因此他们无法通过外部 Python 脚本使用 API。

请注意,这种身份验证方式即使在 API 请求未加密的情况下也有效。

您可以尝试一些 OAUTH 提供商提供的工作流程。

本质上,您在机器中放置一些凭据并使用它们来获取令牌。然后令牌与您的请求一起发送到您的服务器。RASPI 和您的 REST 服务都使用提供者作为验证请求者的参考。

如果您需要更多信息,可以参考此链接。尽管特定于 auth0,但它可以为您提供一个起点。

https://auth0.com/blog/using-m2m-authorization/