如何以编程方式验证连接 API?
How to authenticate programatically Connection API?
我必须与两个以上的设备进行通信,这些设备与 Google 附近的 API 连接完美配合。现在我需要保护连接以限制对集群网络的访问。 API 公开了一种对设备进行身份验证的方法,该方法与库提供的令牌一起使用,但是 this token is intended to be authorized by two users in the UI。我需要以编程方式执行此操作,用户不应该这样做。
有一种获取令牌以编程方式进行身份验证的方法,可以在 docs 中找到,但在库中不可用。
我尝试过的事情:
因为我没有看到文档声明的不要求用户接受我尝试过的连接的方式:
在端点末尾放置一个秘密
id-secret
所以每个设备都应该解密秘密并验证信息是否与注册的信息匹配,然后接受连接。但是使用 AES 进行加密会产生很长的有效载荷,这会导致设备未被发现。我没有尝试使用 TDES,因为它应该提供更小的有效载荷,但我不确定这是否是可行的方法。
接受连接发送密码,如果无效则断开连接。
我认为这不是一个好的选择,因为网络会暴露给任何人,并且会产生不稳定的行为。
您认为什么是验证设备的好方法?
因为我看到的唯一信息入口点是端点。
目前,您必须先接受连接,然后立即执行 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 工作
我必须与两个以上的设备进行通信,这些设备与 Google 附近的 API 连接完美配合。现在我需要保护连接以限制对集群网络的访问。 API 公开了一种对设备进行身份验证的方法,该方法与库提供的令牌一起使用,但是 this token is intended to be authorized by two users in the UI。我需要以编程方式执行此操作,用户不应该这样做。
有一种获取令牌以编程方式进行身份验证的方法,可以在 docs 中找到,但在库中不可用。
我尝试过的事情:
因为我没有看到文档声明的不要求用户接受我尝试过的连接的方式:
在端点末尾放置一个秘密
id-secret
所以每个设备都应该解密秘密并验证信息是否与注册的信息匹配,然后接受连接。但是使用 AES 进行加密会产生很长的有效载荷,这会导致设备未被发现。我没有尝试使用 TDES,因为它应该提供更小的有效载荷,但我不确定这是否是可行的方法。接受连接发送密码,如果无效则断开连接。 我认为这不是一个好的选择,因为网络会暴露给任何人,并且会产生不稳定的行为。
您认为什么是验证设备的好方法? 因为我看到的唯一信息入口点是端点。
目前,您必须先接受连接,然后立即执行 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 工作