firebase - 将 drupal 用户迁移到 firebase auth

标签 firebase drupal firebase-authentication drupal-8

我正在尝试将用户从 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数据库中某个用户的数据(这是开发数据,不是真实用户) 密码:$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("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="adeefde4f7ebf9fdf5edc0ccc4c1c4c3ccd9c2df83cec2c0" rel="noreferrer noopener nofollow">[email protected]</a>").
    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("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1251425b485446424a527f737b7e7b7c73667d603c717d7f" rel="noreferrer noopener nofollow">[email protected]</a>").
    PasswordHash(decoded).
    PasswordSalt([]byte("F//ORKH")),
  }

  h := hash.SHA512{
    Rounds: 16,
  }

  result, err := client.ImportUsers(context.Background(), users, auth.WithHash(h))

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

关于firebase - 将 drupal 用户迁移到 firebase auth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56624932/

相关文章:

drupal - 如果我在 Drupal 8 中有两种内容类型并且它们之间存在关系,为什么我要在这两种内容类型中都放置一个引用字段?

javascript - Firebase自定义声明如何设置?

ios - 通过 iOS 中的监听器检查 Firebase 当前登录用户

ios - Swift - 按子值从 Firebase 中选择

Firebase 安全 : read-only parent node, 但可写子节点

drupal - Pathauto 中的菜单路径

python - 列出 Firebase 身份验证中的所有用户

ios - Firebase DynamicLink Url 返回 JSON 序列化错误。 iOS系统

android - 在推送通知 Firebase 中发送 URL

javascript - 无法使用 jQuery Easy Slider 插件 - 请帮助