Ios CloudKit身份验证登录/密码

Ios CloudKit身份验证登录/密码,ios,authentication,parse-platform,cloudkit,Ios,Authentication,Parse Platform,Cloudkit,这是我的问题,我使用解析解决方案构建了一个应用程序。在这个应用程序中,我使用了Parse的基本身份验证。死后我需要迁移 我想用CloudKit解决方案实现身份验证,但我不确定这是否是一个好的实践。我知道Cloudkit基本身份验证是基于用户apple帐户的。但我需要使用登录名/密码进行身份验证 在Parse中没有类似“password”的字段,因此我不知道如何以安全的方式将密码存储在表Users中。我不确定在公共部分保存密码是否安全 我想知道是否有在CloudKit中实现基本身份验证(登录/密码

这是我的问题,我使用解析解决方案构建了一个应用程序。在这个应用程序中,我使用了Parse的基本身份验证。死后我需要迁移

我想用CloudKit解决方案实现身份验证,但我不确定这是否是一个好的实践。我知道Cloudkit基本身份验证是基于用户apple帐户的。但我需要使用登录名/密码进行身份验证

在Parse中没有类似“password”的字段,因此我不知道如何以安全的方式将密码存储在表Users中。我不确定在公共部分保存密码是否安全

我想知道是否有在CloudKit中实现基本身份验证(登录/密码)的良好实践

提前感谢您的帮助;)


PS:另一个解决方案应该是转移到firebase,但目前我更喜欢CloudKit的逻辑。

当你选择CloudKit时,你必须使用苹果的iCloud身份验证,并且不能存储用户的密码

但是您可以构建一个额外的身份验证层。当用户使用iCloud登录时,您可以要求他选择一个密码,您可以将其存储在私有(!)记录类型中(参考iCloud用户)


这样,用户需要首先使用iCloud登录,然后在应用程序中输入特定于应用程序的密码。

要使用CloudKit管理登录/密码,无需后端登录代码,但允许用户从其他位置登录(web应用程序、安卓应用程序等,使用最近引入的CloudKit服务器密钥访问),您需要管理应用程序内的登录逻辑:

工作流程:

A.用户注册

  • 在Cloudkit Dashboard的公共数据库中创建“用户”容器

  • 当用户在注册时键入密码时,请加密密码

  • 如果用户名/电子邮件已经存在,则向“用户”容器发出请求。如果是,则警告用户。如果没有,请继续此过程
  • 将电子邮件/用户名和加密密码上载到Cloudkit中的公共“用户”容器中。还包括用户的iCloudId
  • B.用户登录

  • 当用户键入用户名/电子邮件和密码时,使用用户名/电子邮件查询“用户”加密密码。如果请求为nil,则表示数据库中不存在此用户名/电子邮件
  • 如果数据库返回加密密码,请在应用程序中对其解密,并将其与用户在登录表单中键入的密码进行比较。如果密码不匹配,则警告用户密码不匹配
  • C.用户忘记密码

    • 为了让用户更改密码,用户必须登录到其iCLoud帐户,以便比较请求更改密码的帐户的iCloudId是否等于保存在CloudKit中的用户的iCloudId
    • 或者,您可以在用户注册时向他询问安全问题,然后在用户请求更改密码时检查这些问题

    这不是一个建议的解决方案(就可扩展性而言),但我相信它回答了您的问题。

    谢谢您的回答,我没有指定我的应用程序是用于关联的,他们需要控制用户,这是在后端创建用户的关联。如果您不是项目的一部分,则不可能创建帐户。Cloudkit可能不是我问题的解决方案。你可以让他们输入用户名和密码。然后首先检查后端系统是否正常,然后如果正常,将其连接到iCloud用户(将用户名加密码哈希和iCloud ID保存在单独的用户记录类型中)。之后,用户登录到iCloud就足够了。他的iCloud帐户已连接到后端系统中的帐户。我理解您的答案,但我的问题是我没有后端系统,它由parse管理。所以我在寻找parse的替代品。在我的例子中,我认为CloudKit不能做这项工作,因为这种身份验证。我正朝火场方向看。非常感谢你的帮助