使用 PBKDF2 在 Jackrabbit OAK 中存储密码哈希

Using PBKDF2 to store password hashes in Jackrabbit OAK

我们正在将基于 Sling 6 和 Jackrabbit 构建的应用程序迁移到 Sling 10 和 Oak。我们使用的是 Oak 1.6.8,这是示例 sling 10 应用程序中使用的版本。我们之前构建了自己的身份验证器和登录插件,以使用 CryptedSimpleCredentials 并在 JCR 中加密密码。看起来这是现在 Oak 中使用 CredentialsImpl 的标准。我正在尝试决定我们是否可以删除自定义代码并正确配置 oak。我已将 UserConfigurationImpl.config 设置为以下值:

passwordHashAlgorithm="PBKDF2WithHmacSHA256"
passwordHashIterations="1000"
passwordSaltSize="20"

我从 org.apache.jackrabbit.oak.spi.security.user.util.PasswordUtil.generatePBKDF2(...) 中的评论中获取了 HashAlgorithm 密钥。按照 PasswordUtil 中的代码,PBKDF2 前缀将使用密钥生成摘要。

单步执行代码,我可以看到在 org.apache.jackrabbit.oak.security.user.UserInitializer.Initialize(...) 期间创建了管理员用户 (:139)。为密码创建的哈希使用上述方法并生成具有盐和迭代的哈希:

{PBKDF2WithHmacSHA256}b7dab4b06ad4be41-1000-8675468f4239a321b3dc8b9989a2fae0

但是,当尝试使用管理员用户登录时,无法对用户进行身份验证。 PasswordUtil.isSame() 在调用 extractAlgorithm(hashedPwd) 时无法识别算法,因为 message.digest("PBKDF2WithHmacSHA256") 无效。

我找不到任何其他人寻求有关此主题的帮助,这让我相信,也许我有一个我看不到的根本误解。我们将不胜感激。

这似乎是 OAK-7778 修复的错误。