我是jboss和jbpm的新手;我需要帮助进行jboss7身份验证。我们遇到“密码不正确/需要密码”错误。
以下是我们jboss standlone的一部分。*。xml conf。
<security-domain name="other" cache-type="default">
<authentication>
<login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
<module-option name="dsJndiName" value="java:jboss/datasources/jbpmDS"/>
<module-option name="principalsQuery" value="select passwd from users where username=?"/>
<module-option name="rolesQuery" value="select userRoles 'Roles' from userroles where username=?"/>
<module-option name="hashAlgorithm" value="pbkdf2_sha256"/>
</login-module>
</authentication>
</security-domain>
我们有密码和pbkdf2_sha256加密,但不知道如何在独立* .xml中配置“pbkdf2_sha256”参数
我们使用django(v1.4 pbkdf2_sha256加密)框架来管理用户。
有人能帮助我吗?
答案 0 :(得分:0)
基于来自here的信息,这里的实现应该与Django pbkdf2_sha256一起使用(您需要使用JBoss注册此类,而不是原始的DatabaseServerLoginModule)。请记住,我没有测试它......
public class PBKDF2WithSha256DatabaseServerLoginModule extends DatabaseServerLoginModule {
protected boolean validatePassword(String inputPassword, String expectedPassword) {
if(inputPassword == null || expectedPassword == null) {
return false;
}
String[] encodedPassword = expectedPassword.split("\\$");
int encodedIterations = Integer.parseInt(encodedPassword[1]);
byte[] encodedSalt = encodedPassword[2].getBytes(Charset.forName("UTF-8"));
String encodedHash = encodedPassword[3];
SecretKeyFactory f = null;
try {
f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("Need a Java implementation with cryptography.");
}
KeySpec ks = new PBEKeySpec(inputPassword.toCharArray(), encodedSalt, encodedIterations, 256);
SecretKey s = null;
try {
s = f.generateSecret(ks);
} catch (InvalidKeySpecException e) {
// Encoded password is corrupt
return false;
}
if (encodedHash.equals(Base64.getEncoder().encodeToString(s.getEncoded()))) {
return true;
} else {
return false;
}
}
}