我是一家公司的开发人员,该公司的应用程序是使用PHP和MySQL构建的。我们有大约300个用户使用bcrypt对其密码进行哈希处理并存储在users表中的用户。我们希望使用Angular和Firebase重建应用程序。
我的问题是,如何通过Firebase迁移这些用户并使用Firebase Auth。迁移配置文件信息很容易,但我想确保用户在登录新应用程序时仍然可以使用相同的电子邮件/密码。
以下是我想到的一些方法。在我看来,所有这些都很糟糕。
A)创建一个使用bcrypt的自定义身份验证系统,然后只复制哈希值。这不是我想要的,因为我不想维护自定义身份验证解决方案。
B)每次用户登录旧系统时,从登录字段中获取密码,以明文形式存储,然后使用电子邮件/密码在Firebase中手动创建每个用户。在我们切换到新应用程序之前,这将要求100%的用户登录。这不太可能。这显然也是对隐私的侵犯。我敢肯定它违反了某种法律或标准。但它有效,这是最后的选择。
C)每次用户登录旧系统时,请以明文形式将电子邮件/密码发送到脚本,该脚本会使用相同的用户/电子邮件自动创建新的Firebase用户。在我们切换到新应用程序之前,这将要求100%的用户登录。这不太可能。它比选项B更难建立。
这些选项都不是很好看。他们都有缺点。有更好的选择吗?如果不是,在B和C之间,哪个是最合法/合乎道德的?选项B引诱我,因为它非常简单,但我不想破坏任何法律或失去我公司客户的信任。
答案 0 :(得分:8)
[来自Firebase身份验证小组]
Firebase有更好的解决方案。对于众所周知的哈希算法(hmac-sha256,bcrypt,scrypt等),Firebase身份验证服务可以批量导入现有用户的密码 哈希 。最终用户只需使用现有密码进行签名,您的应用就会收到包含您上传的同一user_id的Firebase令牌。没有选项A / B / C.
[更新11/19] Firebase command line tool 3.2.0支持将bcrypt哈希密码导入Firebase身份验证服务。
答案 1 :(得分:4)
披露:我在Auth0工作。
免责声明:如果您真的从实际的角度考虑使用Firebase,这可能对您没有帮助,因为它专注于Auth0提供的解决类似于您所描述的问题的问题。 但是,从理论的角度来看,这可能对您有所帮助,因此我认为值得分享。
足够合法的东西......
查看本指南,详细了解Auth0 supports migrating users from your custom store to a hosted one。
的详细信息...从自定义数据库连接自动将用户迁移到Auth0。此功能可在每次登录时将您的用户一次一个地添加到Auth0数据库中,并避免要求用户同时重置密码。
这种方法与您的选项C类似,但唯一需要保留旧系统的是数据库。每个人都会开始使用新的应用程序,登录将透明地发生在用户身上。根据Firebase提供的API,您很可能实现类似的东西,这将是我的建议。
此外,您甚至不应考虑包含手动步骤的任何流程,并且必须处理纯文本密码。
最后一点,关于重建应用程序以使用外部身份验证服务的出色决定,即使它不是Auth0。 :)子>
身份验证是一个难题,希望更多应用程序开发人员不要再浪费时间处理与其应用程序解决的业务问题完全无关的问题。
答案 2 :(得分:0)
Firebase CLI最近添加了auth:import
命令,允许您从CSV或JSON将现有用户数据库导入Firebase Auth。