我正在创建一个仅由特定设备使用的 API。我想使用公钥和私钥对进行身份验证,类似于 github 使用 SSH 进行身份验证的方式。
我认为可行的方案如下:
- 设备将使用其 ID 请求授权。
- 服务器通过提供的 ID 找到设备的公钥并加密一个随机字符串。字符串被发送到设备。
- 设备接收加密字符串并使用其私钥对其进行解密,并将结果发送回服务器。
- 服务器检查字符串以确保它匹配并在检查正确时为设备设置正确的会话变量。
所有这些都是通过 SSL 连接进行的,因此第 3 步不能被窥探并用于再次进行身份验证。有些设备不需要这种类型的授权,因此 SSL 连接不能只验证设备的公钥是由服务器的证书颁发机构生成的,如果不是则关闭连接。
首先,这有意义吗,还是有更好的方法?第二 - 是否有一些宝石已经在 Rails 中做到了这一点?这似乎是一种比较常见的做事方法。