身份验证时如何设计选择SIM卡并在iOS中获取唯一ID?

Posted

技术标签:

【中文标题】身份验证时如何设计选择SIM卡并在iOS中获取唯一ID?【英文标题】:How to design choose the SIM and get a unique id in iOS while authentication? 【发布时间】:2020-08-03 19:52:51 【问题描述】:

A) 在 android 中,我可以获取 SIM 的详细信息,并且可以专门选择用于从该 SIM 发送 OTP 的 SIM。我有一个可以在 Android 中实现的示例屏幕。

我点击了ios How can I get details about the device data provider (like Verizon/AT&T) of an iphone programmatically?的链接

https://developer.apple.com/forums/thread/9171此链接指出,由于 Apple 隐私政策,我们无法从设备获取 SIM 电话号码

如何在iOS中实现同屏?任何替代的想法或帮助表示赞赏

B) 如何获取唯一ID进行身份验证?

在 Android 中,我们可以获得(IMEI+SIM 序列号)可用于身份验证,但在 iOS 中,所有这些都因隐私而受到限制。相反,不可能获得每个设备唯一的 UDID。我知道我可以为此使用供应商 ID:

UIDevice.current.identifierForVendor!.uuidString

但正如文档所说:The value in this property remains the same while the app (or another app from the same vendor) is installed on the iOS device. The value changes when the user deletes all of that vendor’s apps from the device and subsequently reinstalls one or more of them.

由于当用户卸载应用程序时供应商 ID 会发生变化。那么,是否有任何方法可以获取除供应商 ID 之外的唯一 ID 用于身份验证,该 ID 不会更改并且始终是唯一的?

【问题讨论】:

a) 也许重新设计屏幕,让用户自己输入电话号码? b) 没有合法的方式来跟踪其唯一设备是否跨安装 @NeilGaliaskarov 你能把这个作为答案发布,这样我就可以投票了吗?感谢您的评论..请详细说明您的 b) 评论 【参考方案1】:

如何获取 SIM 电话号码?

正如问题中所述,出于安全原因,无法获取电话号码。我建议你有一个文本字段并让用户输入数字,这样你就可以发送短信来验证它

如何获取唯一ID进行身份验证?

根据您的部署目标需求,您有两种选择:

    Apple 在 iOS 11 中提出了DeviceCheck 框架。您的应用应使用 DeviceCheck API 来生成用于标识设备的临时令牌。您的关联服务器将此令牌与您从 Apple 收到的身份验证密钥相结合,并使用结果请求访问每个设备的位。 Apple 非常故意地,DeviceCheck 令牌不能用于识别特定设备。 但是您可以尝试播放以获取 iOS 设备状态的唯一标识符

    创建您自己的唯一 ID 并将其保存在 keychain。

参考文献

WWDC 2017 — Session 702 — iOS、macOS、tvOS、watchOS Apple Documentation: — 访问您的关联服务器可以在其业务逻辑中使用的每个设备、每个开发人员的数据。 Unique Identifier for the iOS Devices Article

【讨论】:

感谢您的详细回答那么现在使用 vendorIdentifier 更好吗?因为我的应用也需要支持 iOS 11 以下的 iOS 版本,并且设备检查框架仅适用于 iOS 11 + vendorIdentifier 非常不稳定,我强烈不建议您使用它。在我的实践中,它甚至在应用更新时也发生了变化。 那么您建议使用什么来代替 vendorIdentifier ? 任何帮助将不胜感激。是 NSString *UUID = [[NSUUID UUID] UUIDString];仍然可以使用而不是 vendorIdentifier? 我用第二个选项更新我的答案,这可能对你有帮助

以上是关于身份验证时如何设计选择SIM卡并在iOS中获取唯一ID?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用他们的 Spotify 凭据对用户进行身份验证并在 NodeJS 应用程序中获取他们的音乐偏好? [关闭]

快速从用户电话号码中获取电话国家代码

如何以编程方式将证书导入我的iOS应用程序的钥匙串,并在需要时将身份传递给服务器?

使用 Rails 和 React 时如何在标头中获取 JWT 令牌

如何唯一识别ios设备

为 iOS 应用程序中的 Facebook 身份验证设计,该应用程序还访问安全的 Web 服务