将drupal用户迁移到firebase身份验证

将drupal用户迁移到firebase身份验证,firebase,drupal,firebase-authentication,drupal-8,Firebase,Drupal,Firebase Authentication,Drupal 8,我正在尝试将用户从Drupal 8迁移到firebase auth 我已经试着按照上面的说明去做了 用户导入成功,但在我尝试登录时密码不起作用。在反转Drupal代码之后,我感觉firebase提供的sha512散列机制没有执行与Drupal确定密码散列相同的步骤 drupal数据库中一个用户的数据(这是开发数据,不是真实用户) 密码:$S$EF//orkhhzkg9l4ueuunycm0v5hatfjqxxbkn19biymspxi3u68 通过阅读drupal代码,我确定了以下几点 $S$=

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

我已经试着按照上面的说明去做了

用户导入成功,但在我尝试登录时密码不起作用。在反转Drupal代码之后,我感觉firebase提供的sha512散列机制没有执行与Drupal确定密码散列相同的步骤

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

通过阅读drupal代码,我确定了以下几点

$S$=SHA512

“E”=16轮

“F//ORKH”=盐

“hzkg9l4ueuunycm0v5hatfjqxbkn19biymspxi3u68”=散列

这是从这里拍摄的:

导入的相关Go代码:

用户:=[]*auth.UserToImport{
(&auth.UserToImport{})。
UID(“00048EBBB178D47F674F484885205235C”)。
电邮(“CPIZFTPX@mailinator.com").
密码哈希([]字节(“hzkg9l4ueuunycm0v5hatfjqxxbkn19biymspxi3u68”))。
PasswordSalt([]字节(“F//ORKH”),
}
h:=hash.SHA512{
轮数:16轮,
}
结果,err:=client.ImportUsers(context.Background(),users,auth.WithHash(h))
所以。。。尽管如此,我认为问题在于drupal代码将实际存储在数据库中的字符串截断为55个字符。您可以在drupal代码(上面粘贴的url)中的
crypt
方法的最后一行看到这一点


有没有人成功地将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帐户上测试它

谢谢你,戴夫。我认为您的建议是正确的,但不幸的是,它仍然不能解决drupal在存储到数据库之前将哈希值截断为55个字符的问题。该代码只返回Bool。哈希密码永远不应该被截断。我在再次查看drupal代码时确实注意到了一些东西,它实际上是Base64编码salt并将其添加到末尾。。。我不是身份验证专家,但通常情况下,在对密码进行哈希运算之前,会将salt添加到密码的开头。在本例中,drupal添加了后面的内容。所以不要发送一个salt,在base64解码散列之前删除它。上周,我从rails应用程序向Firebase添加用户时遇到了类似的问题,但10年前我自己犯了一个错误,在末尾添加了盐。这并没有返回一个bool。请参阅该方法的注释:
@return string*包含哈希密码(和salt)的字符串,或失败时为FALSE。*返回字符串将在最大哈希长度字符处被截断。
您是否使用过此功能?我从Drupal7导入到auth0时遇到了类似的问题,有两个问题。首先,base64编码与您发现的不同。我已经为Drupal创建了一个base64解码,您可以使用它来反转,然后重新编码。其次,Drupal迭代散列函数,如果firebase不支持该函数,那么它将根本无法工作。如果有帮助,我的解码函数就在这里:。