我们正在将基于 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") 无效。
我无法找到任何其他人寻求有关此主题的帮助,这使我相信也许我有一个我看不到的基本误解。任何和所有的帮助将不胜感激。