0

新的 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 服务。


那么,哪种解决方案是最好的?我错过了什么并且有更好的解决方案吗?

4

1 回答 1

0

从 iOS 12 开始,Apple 为开发人员提供了一个 SDK 来访问用户 Apple ID——显然是在用户同意的情况下。开发者可以使用AuthenticationServiceSDK 来实现这一点。请在文档中阅读更多内容。我确信这就是 Day One 应用程序如何执行您所描述的操作。

于 2020-02-04T07:57:59.340 回答