2

我试图消除用户必须手动创建用户名/密码才能登录 Web 服务的负担,因此我在应用程序初始启动时自动创建用户名和密码。

所以我使用SSKeychain将密码存储在钥匙串中

[SSKeychain setPassword: myPassword forService: @"com.xxx.xxx" account: username];

并使用以下命令生成 UUID(用于用户名和密码):

+(NSString *) GetUUID {
    CFUUIDRef theUUID = CFUUIDCreate(NULL);
    CFStringRef string = CFUUIDCreateString(NULL, theUUID);
    CFRelease(theUUID);
    return [(NSString *)string autorelease];
}

我希望单个用户可以在其所有设备上访问这些凭据,因此我正在考虑使用 NSUserDefaults 和 iCloud 来存储用户名,以便当用户在新设备上安装应用程序的新副本时,他们的用户名可以从 iCloud 中检索,他们可以使用钥匙串访问他们的凭据,这将授予对 Web 服务的访问权限。

理想情况下,我想要以下功能

  • 首次登录时,应用程序会自动生成用户名/密码
  • 用户无需输入凭据,只需通过应用程序的自动帐户创建部分即可。
  • 在任何设备上安装/重新安装应用程序后,他们将可以使用存储在 NSUserDefaults/iCloud 上的“用户名”访问钥匙串中的凭据

所以我的问题是:

  • 将用户名存储在 NSUserDefaults 上会允许其他用户更改手机上的 NSUserDefaults plist 以访问其他人的帐户吗?(据我了解是肯定的)
  • 是否有另一种方法来存储用户名,以便其他用户无法更改 plist 并自动登录到其他人的帐户?
  • 我对钥匙串的概念有点困惑,所以根据我的理解,钥匙串是在整个应用程序中共享的(就像一个为全球所有用户提供加密数据的中央数据库(?)),所以从技术上讲,如果另一个用户可以访问到您的凭据(即,他们知道您的用户名并将 NSUserDefault 上的用户名替换为您的用户名),他们可以使用它来访问您的数据。这个对吗?(我认为钥匙串类似于 Mac,它是每个用户唯一的安全存储)。

我通常很好地理解概念,但钥匙串让我有点困惑。我已经阅读了 Apple 的钥匙串概念解释,但我无法理解它是所有用户访问的加密数据的中央存储库还是每个用户都有自己的钥匙串存储并且没有人可以访问其他人的钥匙串存储的概念,即使他们有他们的用户名/密码。

4

0 回答 0