我们正在将基于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)。为密码创建的哈希使用上述方法,并生成带有salt和迭代的哈希:
{PBKDF2WithHmacSHA256}b7dab4b06ad4be41-1000-8675468f4239a321b3dc8b9989a2fae0
但是,当尝试使用admin用户登录时,它无法对用户进行身份验证。调用extractAlgorithm(hashedPwd)时,PasswordUtil.isSame()无法识别算法,因为message.digest(“ PBKDF2WithHmacSHA256”)无效。
我找不到任何其他人寻求与此主题的帮助,这使我相信也许我有一个看不见的根本误解。任何帮助都将不胜感激。