如何以编程方式验证连接 API?

How to authenticate programatically Connection API?

我必须与两个以上的设备进行通信,这些设备与 Google 附近的 API 连接完美配合。现在我需要保护连接以限制对集群网络的访问。 API 公开了一种对设备进行身份验证的方法,该方法与库提供的令牌一起使用,但是 this token is intended to be authorized by two users in the UI。我需要以编程方式执行此操作,用户不应该这样做。

有一种获取令牌以编程方式进行身份验证的方法,可以在 docs 中找到,但在库中不可用。

我尝试过的事情:

因为我没有看到文档声明的不要求用户接受我尝试过的连接的方式:

您认为什么是验证设备的好方法? 因为我看到的唯一信息入口点是端点。

目前,您必须先接受连接,然后立即执行 challenge/response。它不是最干净的,但它仍然是安全的。

广播身份

我建议为端点添加一个唯一 ID name/info。例如。 “12345:威尔”。这样,设备就有了一个稳定的 ID,您可以参考。为了使这更加安全,您可以对 ID 加盐。例如。 “12:54321:Will”,或“${salt}:${hashedId}:${name}”。要解析散列 ID,您必须遍历设备上的所有已知 ID 和 运行 sha(salt + id).limit(5) 直到其中一个与 hashId 匹配。这样,每次盐旋转时广告都会改变,并且更难跟踪设备。如果您也混淆了名称,则可获得加分。

保护连接

立即接受连接,不验证授权令牌。不要发送私人信息,因为连接不安全。双方设备都应启动一个计时器(1~5 秒),并向另一方发出挑战。质询应以某种方式包含授权令牌。例如。 privateKey.sign(authToken)。您可能还想在两个方向上进行验证,因此您也可以包含 public 键。例如。 localPrivateKey.sign(sharedAuthToken + remotePublicKey)。如果双方都在时限内验证,则可以认为连接是安全的。

免责声明:我在 Nearby Connections 工作