Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Web应用程序上的唯一设备ID(角度、反应等)_Javascript_Angular - Fatal编程技术网

Javascript Web应用程序上的唯一设备ID(角度、反应等)

Javascript Web应用程序上的唯一设备ID(角度、反应等),javascript,angular,Javascript,Angular,我有一个特殊的需要,这给了我一些困难的时间。基本要求是:我们需要通过一个ID唯一地识别设备(可以是PC、Mac、平板电脑、手机),就像IMEI一样。。。由于某些应用程序的某些许可限制,这是必需的 挑战:我们运行的是一个角度,浏览器几乎不可能唯一地识别设备。由于我们在浏览器沙箱中,我没有机会得到像Mac地址之类的东西,或者任何可以作为定义唯一ID的良好开端的东西 我们迄今为止所做的尝试: MediaDeviceInfo.deviceId: 一方面,在我对Chrome进行的第一次测试中,它是空的

我有一个特殊的需要,这给了我一些困难的时间。基本要求是:我们需要通过一个ID唯一地识别设备(可以是PC、Mac、平板电脑、手机),就像IMEI一样。。。由于某些应用程序的某些许可限制,这是必需的

挑战:我们运行的是一个角度,浏览器几乎不可能唯一地识别设备。由于我们在浏览器沙箱中,我没有机会得到像Mac地址之类的东西,或者任何可以作为定义唯一ID的良好开端的东西

我们迄今为止所做的尝试:

  • MediaDeviceInfo.deviceId

    • 一方面,在我对Chrome进行的第一次测试中,它是空的,而且Safari不支持它
  • 阀门指纹JS2

    • 乍一看,我们认为我们中了大奖,因为它正确地生成了相同的ID,即使我从匿名窗口调用它!但是,它仍然为不同的浏览器生成另一个ID
    • 基本上,它是通过列举所有浏览器功能(至少是可访问的功能)然后创建该功能的散列来工作的。。。问题:如果您的设备具有完全相同的配置,它们将具有相同的ID!我在两部配置相同的iPhone上试过了,甚至是在同一天买的!:-)
  • 创建UID并在本地存储上保存:创建UID()并将其存储在本地存储上。我们路上的一些问题:

    • 如果我打开一个匿名窗口,当然本地存储将不在那里,这意味着我将得到一个新的“UUID”
    • 除此之外,我们还有一些单独的angular应用程序,它们需要共享本地存储,这是不可能的,因为SameOrigin的安全限制。我们可以使用iFrame和PostMessage()来克服它。actuyll有一些NPM包正在这样做,如下所示:。老实说,我们不太喜欢创建“跨域本地存储”的想法
我知道这个问题没有简单的解决办法,但我想问一下,如果有人面临这样的情况,他们是如何解决的。当然,如果我能够用完浏览器沙盒,它可以直接访问设备信息,如MAC地址、IMEI或任何类似的信息,这将很容易,但正如前面提到的,浏览器沙盒是有限制的

想法

提前感谢


佩德罗

我将向大家介绍我在2018年写的一个答案,现在仍然大致相同:

简单的回答是:你不能,真的

您将无法在所有浏览器中获得唯一标识设备的任何内容,并且无法与常规设备进行比较。正如你所发现的,你可以接近,但这不是一件确定的事情


你能做的最好的方法是将两种技术结合在一起(比如指纹+存储UID),它可能会得到99%的案例,但你无法确定所有的案例。

我将向你推荐我在2018年写的一个答案,现在仍然差不多:

简单的回答是:你不能,真的

您将无法在所有浏览器中获得唯一标识设备的任何内容,并且无法与常规设备进行比较。正如你所发现的,你可以接近,但这不是一件确定的事情


你能做的最好的事情就是将两种技术结合起来(比如指纹+存储的UID),它可能会得到99%的案例,但你无法确定所有案例。

谢谢你的回答,@samanime,我希望有人能说出我遗漏的东西!:-)我们最终要做的不是试图从浏览器中完全识别客户机,而是根据调用方的IP地址或我们可以获得的任何其他信息在后端编写一些代码。当然,如果客户机来自NAT请求,或者在代理下,我们将获得相同的IP地址,因此我们可以使用指纹+uuid,并最终接近99.9!:-)如果我们在局域网上,我们甚至可以尝试获取MAC地址……谢谢你的回答,@samanime,我希望有人能说出我遗漏的东西!:-)我们最终要做的不是试图从浏览器中完全识别客户机,而是根据调用方的IP地址或我们可以获得的任何其他信息在后端编写一些代码。当然,如果客户机来自NAT请求,或者在代理下,我们将获得相同的IP地址,因此我们可以使用指纹+uuid,并最终接近99.9!:-)如果我们在局域网上,我们甚至可以尝试获取MAC地址。。。