将用户身份验证迁移到 Firebase Auth

Migrate user authentication to Firebase Auth

我是一家公司的开发人员,该公司有一个使用 PHP 和 MySQL 构建的应用程序。我们有大约 300 个用户使用 bcrypt 散列密码并存储在用户 table 中。我们正在寻求使用 Angular 和 Firebase 重建应用程序。

我的问题是,如何通过 Firebase 迁移这些用户并使用 Firebase Auth。迁移配置文件信息很容易,但我想确保用户在登录新应用程序时仍然可以使用相同的 email/password。

以下是我想到的一些方法。这些在我看来都很糟糕。

A) 创建一个使用 bcrypt 的自定义身份验证系统,然后将哈希复制过来。这不是我想要的,因为我不想维护自定义身份验证解决方案。

B) 每次用户登录到旧系统时,从登录字段中获取他们的密码,以明文形式存储,然后在 Firebase 中使用他们的 email/password 手动创建每个用户。这将需要 100% 的用户在我们切换到新应用程序之前登录。那不太可能。此外,这显然是对隐私的侵犯。我确定它违反了某种法律或标准。但它确实有效,而且是不得已的选择。

C) 每次用户登录到旧系统时,将 email/password 以明文形式发送到脚本,该脚本会自动创建一个具有相同 user/email 的新 Firebase 用户。这将需要 100% 的用户在我们切换到新应用程序之前登录。那不太可能。它也比选项 B 更难构建。

None 这些选项看起来非常好。它们都有缺点。有更好的选择吗?如果不是,B和C之间,哪个最多legal/ethical?选项 B 很吸引我,因为它非常简单,但我不想违反任何法律或失去我公司客户的信任。

披露:我在 Auth0 工作。

免责声明:如果您真的从实用的角度考虑使用 Firebase,这可能对您没有帮助,因为它侧重于 Auth0 提供的解决类似于你描述的一个。 但是,从理论上讲,这可能对您有所帮助,因此我认为值得分享。


够了合法的东西...

查看本指南以全面了解如何 Auth0 supports migrating users from your custom store to a hosted one

... automatic migration of users to Auth0 from a custom database connection. This feature adds your users to the Auth0 database one-at-a-time as each logs in and avoids asking your users to reset their passwords all at the same time.

该方法类似于您的选项 C,但唯一需要保留在旧系统中的是数据库。每个人都将开始使用新应用程序,并且登录对用户来说是透明的。根据 Firebase 提供的 API,您很可能会实施类似的东西,这是我的建议。

此外,您甚至不应该考虑任何包含手动步骤且必须处理纯文本密码的过程。


最后一点,重建您的应用程序以使用外部身份验证服务的绝妙决定,即使它不是 Auth0。 :)

身份验证是一个难题,希望更多的应用程序开发人员停止将时间浪费在与他们的应用程序解决的业务问题完全无关的问题上。

[来自 Firebase 身份验证团队]

Firebase 有更好的解决方案。 Firebase 身份验证服务能够批量导入现有用户的密码 hashes,用于众所周知的哈希算法(hmac-sha256、bcrypt、scrypt 等) .).最终用户只需使用他们现有的密码进行签名,您的应用就会收到一个 Firebase 令牌,其中包含您上传的相同 user_id。需要选项 A/B/C 的 None。

[11 月 19 日更新] Firebase command line tool 3.2.0 支持将 bcrypt 散列密码导入 Firebase 身份验证服务。

Firebase CLI very recently added an auth:import 命令允许您将现有用户数据库从 CSV 或 JSON.

导入 Firebase Auth