我正在构建一个向服务器发出 HTTP 请求的应用程序。我想知道请求来自从 iOS App Store 或 Android App Store 下载的应用程序。有什么办法可以做到这一点吗?
也许手机上的某种 API 允许与某个证书颁发机构进行签名,而该证书颁发机构本身是由 Apple 的根证书颁发机构签名的?或者与Android类似的东西?
或者也许有某种方法可以使用像 this 这样的“广告标识符”,但不会与 this 发生冲突……Android 有类似的东西吗?
我需要这个主要是为了防止女巫攻击(人们在不购买一百万部 iPhone 的情况下创建数百万个帐户)。
但也许更重要的是,我希望应用程序在服务器上建立一个帐户,而不是让一些小丑向同一服务器发送请求来随意覆盖用户的“udid”,这样应用程序以后就无法连接。我想我可以通过在网络浏览器的浏览器选项卡下保存 cookie 或 localStorage 来防止后一种情况,并希望它不会被清除。
回答我自己的问题:这称为证明。
在 iOS 上,在 Swift 和 Objective C 中,它称为 DCAppAttestService:
https://developer.apple.com/documentation/devicecheck/builting-your-app-s-integrity
Google 有 SafetyNet 证明 API,但他们正在弃用它:
https://developer.android.com/privacy-and-security/safetynet/deprecation-timeline
在网络上,有时您还可以使用网络身份验证证明,但它们用于身份验证器,可能是也可能不是手机本身。无论如何,它确实保证了稀缺性:
https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API/Attestation_and_Assertion