将 drupal 用户迁移到 firebase auth



我正在尝试将用户从Drupal 8迁移到Firebase auth。

我已经尝试按照 https://firebase.google.com/docs/auth/admin/import-users#import_users_with_md5_sha_and_pbkdf_hashed_passwords 上的说明进行操作。

用户导入成功,但当我尝试登录时密码不起作用。在反转Drupal代码后,我感觉Firebase提供的sha512哈希机制与drupal确定密码哈希的步骤不同。

一个用户的 drupal 数据库中的数据(这是开发数据,不是真实用户) password: $S$EF//ORKHHZKG9L4UEUUNycm0v5HatfjQxkxbKn19BiYMsPxi3u68

通过阅读drupal代码,我确定了以下内容

$S$ = SHA512

"E" = 16 发

"F//ORKH" = 盐

"HZKG9L4UEUUNycm0v5HatfjQxkxbKn19BiYMsPxi3u68" = 哈希

这是从这里获取的:https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Password%21PhpassHashedPassword.php/class/PhpassHashedPassword/8.7.x

导入的相关 Go 代码:

users := []*auth.UserToImport{
(&auth.UserToImport{}).
UID("00048ebbb178d47f674f48485205235c").
Email("CPIZFTPX@mailinator.com").
PasswordHash([]byte("HZKG9L4UEUUNycm0v5HatfjQxkxbKn19BiYMsPxi3u68")).
PasswordSalt([]byte("F//ORKH")),
}
h := hash.SHA512{
Rounds: 16,
}
result, err := client.ImportUsers(context.Background(), users, auth.WithHash(h))

所以......综上所述,我认为问题是drupal代码将实际存储在数据库中的字符串截断为55个字符。您可以在 drupal 代码中crypt方法的最后一行中看到这一点(上面粘贴的 url)。

有没有人成功地将drupal 8用户迁移到Firebase?如果是这样,我很想知道我错过了哪一步。如果没有,对我的发现的一些确认将有助于我的理智。

从这个来看,这似乎不像是 SHA。大多数系统将 SHA 的字节编码为字符串,以便于存储。查看您发布的 Drupal 代码文件,看起来它们对 SHA 进行 base64 编码。

在这种情况下,我认为在传递到PasswordHash之前需要对其进行解码

尝试添加:

decoded, err := base64.StdEncoding.DecodeString("HZKG9L4UEUUNycm0v5HatfjQxkxbKn19BiYMsPxi3u68")

然后只需将其传递到代码的其余部分:

users := []*auth.UserToImport{
(&auth.UserToImport{}).
UID("00048ebbb178d47f674f48485205235c").
Email("CPIZFTPX@mailinator.com").
PasswordHash(decoded).
PasswordSalt([]byte("F//ORKH")),
}
h := hash.SHA512{
Rounds: 16,
}
result, err := client.ImportUsers(context.Background(), users, auth.WithHash(h))

我不知道密码是什么,否则我会在我的Firebase帐户上测试它。

最新更新