新的 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 服务。
那么,哪种解决方案是最好的?我错过了什么并且有更好的解决方案吗?