gpt4 book ai didi

javascript - Javascript Web 应用程序上的唯一设备 ID(Angular,React,...)

转载 作者:行者123 更新时间:2023-12-05 00:37:26 26 4
gpt4 key购买 nike

我有一个特殊的需求,这让我很难过。基本要求是:我们需要通过一个 ID 唯一标识设备(可以是 PC、Mac、平板电脑、手机),就像 IMEI 一样……这是由于某些应用程序的某些许可限制而需要的。
挑战:我们正在运行 Angular,而浏览器几乎不可能唯一地识别设备。由于我们在浏览器沙盒中,我没有机会获得类似 Mac 地址或任何可以作为定义唯一 ID 的良好开端的东西。
到目前为止,我们尝试了什么:

  • MediaDeviceInfo.deviceId : https://developer.mozilla.org/en-US/docs/Web/API/MediaDeviceInfo/deviceId
  • 一方面,在我在 Chrome 上进行的第一次测试中,它是空的,而且 Safari 也不支持它...

  • Valve 的指纹 JS2 : https://valve.github.io/fingerprintjs2/
  • 乍一看,我们认为我们中了大奖,因为它正确地生成了相同的 ID,即使我从匿名窗口调用它!但是,它仍然会为不同的浏览器生成另一个 ID...
  • 基本上它通过枚举所有浏览器功能(至少是可访问的功能)然后通过创建一个哈希来工作......问题:如果您的设备具有完全相同的配置,它们将具有相同的 ID!我在 2 部具有相同配置并且甚至在同一天购买的 iPhone 上进行了尝试! :-)

  • 创建 UID 并保存在 Localstorage :创建一个 UID ( How to generate UUID in angular 6 ) 并将其存储在本地存储中。我们途中的一些问题:
  • 如果我打开一个匿名窗口,当然 LocalStorage 将不存在,这意味着我将获得一个新的“UUID”
  • 除此之外,我们有一些单独的 Angular 应用程序,它们需要共享本地存储,由于 SameOrigin 安全限制,这是不可能的。我们可以使用 iFrame 和 PostMessage (https://levelup.gitconnected.com/share-localstorage-sessionstorage-between-different-domains-eb07581e9384) 来克服它。确实有一些 NPM 包这样做:https://github.com/ofirdagan/cross-domain-local-storage .老实说,我们不太喜欢创建“跨域本地存储”的想法...


  • 我知道这个问题没有简单的解决方案,但我想在这里问一下是否有人遇到过这样的情况以及他们是如何解决的。当然,如果我能够用完直接访问设备信息(例如 MAC 地址、IMEI 或类似信息)的浏览器沙箱,那将很容易,但如前所述,浏览器沙箱是有限制的......
    想法?
    提前致谢!!!
    佩德罗

    最佳答案

    我将向您推荐我在 2018 年写的一个答案,现在仍然几乎相同:how can I get a unique device ID in javascript?
    简短的回答是:你不能,真的。
    您将无法在所有浏览器以及隐身与常规之间获得唯一标识设备的任何内容。正如你所发现的,你可以接近,但这不是一个确定的事情。
    您可以做的最好的事情是将几种技术结合在一起(例如指纹+存储的 UID),它可能会得到 99% 的案例,但您无法确定所有这些。

    关于javascript - Javascript Web 应用程序上的唯一设备 ID(Angular,React,...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63506374/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com