2016-02-10 196 views
3

这是我的问题,我使用Parse解决方案构建了一个应用程序。在这个应用程序中,我使用了Parse的基本认证。解析死亡后,我需要迁移。CloudKit认证登录/密码

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

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

我想知道在CloudKit(登录/密码)中是否有良好的实践基础认证?

在此先感谢您的帮助;)

PS:其他解决方案应该是转移到火力点,但我更喜欢CloudKit的逻辑的时刻。

回答

1

当您选择CloudKit时,您必须使用Apple的iCloud认证,并且不能存储用户的密码。

但是你可以建立一个额外的认证层。当用户使用iCloud登录时,您可以要求他选择一个密码,您可以使用私人(!)记录类型(引用iCloud用户)来存储密码。

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

+0

感谢您的回复,我没有指定的是我的应用程序是用于关联的,他们需要控制用户,这是在后端创建用户的关联,如果您是创建帐户的用户,则无法创建帐户不是项目的一部分。 Cloudkit可能不是我的问题的解决方案。 – Hikosei

+0

你可以让他们输入用户名和密码。然后首先检查后端系统是否正常,如果没有问题,请将其连接到iCloud用户(通过将用户名和密码哈希以及iCloud ID保存在单独的用户recordType中)。之后,用户就可以被吸引进入iCloud。他的iCloud帐户连接到他在后端系统中的帐户。 –

+0

我明白你的答案,但我的问题是我没有后端系统,它是通过解析来管理的。所以我正在寻找解析的替代品。在我的情况下,认为由于这种认证,CloudKit无法完成这项工作。我正在寻找firebase的方向。非常感谢你的帮助 – Hikosei

5

要使用CloudKit管理登录/密码,而不使用后端登录代码,但让用户使用最近推出的Cloudkit服务器密钥访问从其他位置登录(Web应用程序,Android应用程序等),则需要管理里面的应用程序登录逻辑:

工作流程:

A.用户注册

  1. 在Cloudkit Dashboard中的公共数据库中创建一个 “用户” 容器。

  2. 当用户在注册时输入密码时,加密密码。

  3. 如果用户名/电子邮件已存在,请向“用户”容器发出请求。如果是这样,警告用户。如果没有,继续这个过程。
  4. 在Cloudkit的公共“用户”容器中上传电子邮件/用户名和加密的密码。还包括用户的iCloudId。

B.用户登录

  1. 当用户输入自己的用户名/电子邮件地址和密码,使用用户名/电子邮件查询“用户”加密的密码。如果请求为零,则表示该用户名/电子邮件不存在于数据库中。
  2. 如果数据库返回加密密码,请在应用程序中对其进行解密,并将其与用户在登录表单中键入的密码进行比较。如果它们不匹配,则警告用户密码不匹配。

C.用户忘记密码

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

这不是一个建议的解决方案(在可扩展性方面),但我相信它会回答你的问题。