ios - 如何像 Day-One 一样使用用户 Apple-ID 创建匿名用户帐户?
问题描述
新的 iOS 应用程序应该能够连接到 Web 服务以跨设备同步数据。
我喜欢日记应用 Day One 解决这个问题的方式:
- 注册时,用户可以选择使用邮件地址设置“真实”帐户或使用其Apple ID登录
- 使用“真实”帐户时,必须确认邮件地址并选择用户名和密码
- 使用 Apple ID 登录时,无需额外步骤。该应用程序使用一些随机用户 ID 连接到 Web 服务
- 在新设备上安装时,使用 Apple-ID 方法重新连接没有问题。
问题1:如何访问Apple ID?
据我所知,该应用程序不可能真正访问 Apple-ID。还是有一些无证的方法可以做到这一点?这怎么可能?
我怀疑该应用程序可能会使用 iCloud 来存储一些令牌?iCloud 存储与 Apple-ID 相关联,因此在新设备上安装时,可以从 iCloud 恢复令牌并使用它重新连接。
还是有其他/更好的方法?
问题2:如何处理认证?
让我们把问题 1 放在一边,假设我们已经解决了创建一些跨设备用户名的问题。如何处理身份验证?
- 解决方案 1:仅使用令牌(Apple ID / iCloud 存储的用户名 / 等)进行身份验证。如果从应用程序到服务器的请求包含有效的用户名令牌,则授予访问权限。
- 解决方案 2:在创建匿名帐户时,除了用户名令牌之外,还会生成一个随机密码。这可以在设备或服务器上完成。但是由于密码必须在两端都知道,因此需要在某个时间点从一端传输到另一端。
- 2a:信任HTTPS连接并传输明文密码
- 2b:使用其他方法(例如,Deffie Hellman)就通用密码达成一致
乍一看,2b 似乎是最安全的解决方案,但真的是这样吗?同步数据未加密,但“仅”信任 HTTPS 连接。使用其他方法传输密码会增加额外的安全性吗?
此外,使用“密码”是否会增加额外的安全性?这不是用户为其用户选择的用户名选择的密码,而是自动生成的用户名/令牌的自动生成密码。
只使用生成的用户名令牌不一样吗?只有有权访问令牌/Apple ID/iCloud 帐户等的人才能访问 Web 服务。
那么,哪种解决方案是最好的?我错过了什么并且有更好的解决方案吗?
解决方案
从 iOS 12 开始,Apple 为开发人员提供了一个 SDK 来访问用户 Apple ID——显然是在用户同意的情况下。开发者可以使用AuthenticationService
SDK 来实现这一点。请在文档中阅读更多内容。我确信这就是 Day One 应用程序如何执行您所描述的操作。
推荐阅读
- java - 我正在尝试交换两个值,同时运行代码时出现此错误“不兼容的类型。找到:'int',需要:'int[]'”
- tensorflow - 如何将训练过程集成到不基于反向传播的 keras 中?
- java - java如何手动解析多部分/相关流
- windows - 在没有 WMI 的情况下在 VBScript 中检索进程的完整路径
- java - 获取:尝试将文件移动到文件夹时出现“java.nio.file.FileSystemException”
- python - 如何在詹金斯作业中运行具有命令行参数的python程序
- javascript - html2canvas + jsPDF IE中的多页
- python-3.x - 如果指定新行,python-docx 在查找和替换中添加返回键符号
- java - 使用 Jolt NIFI 的 JSON 到 JSON 转换?
- flutter - 如何使用 Firestore 数据创建分页数据表?