客户端设备的自动认证

Automatic Authentication of Client Device

全部,

我有一个网络应用程序,用户可以在其中与从设备发送的数据进行交互。这是一个自定义设备,只能与我们随设备提供的代码一起使用。

在设备上,我们希望能够在发送数据之前通过服务器进行身份验证。

在简单的实现中,我可以只存储设备的 ID,并在每次请求时将其发送到服务器。但是,这将是不安全的,因为任何拥有该 ID 的人都可以向服务器发送数据。

这是我的一些想法。

  1. 在设备上存储 "username" 和 "password"。每次设备登录时,服务器都会发送一个新密码供设备在下次身份验证时使用。这感觉不太对。显得脆弱和缺乏安全感。
  2. 生成一个 OTP 并将其与每个请求一起发送到服务器。感觉它会起作用,但我不确定如何生成 OTP。如果在短时间内发送了很多请求,这是否可行?

几个问题。

  1. 这种情况是否有行业最佳实践?
  2. TOTP是否适用于短时间内的多个请求?

设备运行 C#。服务器运行 Node.JS.

如果在短时间内发送了很多请求,TOTP 将无法按预期工作,这些请求可能会因竞争条件而错误地无效。

由于您对设备拥有本地控制权,因此您应该考虑利用 Public 密钥基础设施 (PKI)。一个简单的工作流程可以如下:

  • 生成public-private 对证书或从证书颁发机构购买一对
  • 在设备的证书库中安装私有证书,public在服务器的信任库中安装证书
  • 使用私有证书对请求负载进行签名,并使用 public 证书在服务器上对其进行验证。

可以应用 PKI 的所有标准准则。