Генерация соленого / хешированного пароля для аутентификации на основе контейнера Wildfly
У меня возникают проблемы при создании правильно посоленного / хешированного пароля для новых пользователей в Wildfly 13 с использованием аутентификации контейнера на основе Elytron.
Мой standalone.xml файл содержит следующее jdbc-realm
запись
<jdbc-realm name="TestDbRealm">
<principal-query sql="SELECT password,salt,role FROM users WHERE username=?" data-source="YacDS">
<attribute-mapping>
<attribute to="groups" index="3"/>
</attribute-mapping>
<salted-simple-digest-mapper algorithm="password-salt-digest-md5" password-index="1" salt-index="2"/>
</principal-query>
</jdbc-realm>
Мой источник данных users
Таблица была сгенерирована следующим образом:
CREATE TABLE users (
id SERIAL,
username VARCHAR(255),
password VARCHAR(255),
salt CHAR(8),
role VARCHAR(255),
PRIMARY KEY (id),
UNIQUE (username)
);
Для генерации соленого / хешированного пароля я использовал следующую Java:
String text = "password";
String salt = "12345678";
text = text + salt;
MessageDigest digest = MessageDigest.getInstance("MD5");
byte[] hash = digest.digest(text.getBytes(StandardCharsets.UTF_8));
String encoded = Base64.getEncoder().encodeToString(hash);
System.out.println(encoded);
Используя пароль password
и соль 12345678
я получил u7Dd/xuUSzzGjqrresIAmQ==
как соленый и хешированный пароль. Я вставил это в свою базу данных, используя утверждение
INSERT users(username, password, salt, role) VALUES ('user',
'u7Dd/xuUSzzGjqrresIAmQ==', '12345678', 'testRole');
Но если я использую комбинацию имени пользователя и пароля user
: password
чтобы войти в мое приложение, оно отказывается аутентифицировать меня.
Я полагаю, что проблема заключается в том, как я применяю соль к паролю перед его хэшированием, но я не могу найти никакой документации, чтобы описать, как значение базы данных для password
поле должно быть сгенерировано при использовании соли.
Я был в состоянии заставить все работать, используя simple-digest-mapper
вместо salted-simple-digest-mapper
просто хэшировать пароль без применения соли, поэтому я не думаю, что есть какие-либо проблемы с конфигурацией или настройкой базы данных. Это было только после перехода на salted-simple-digest-mapper
и используя соль, которую учетная запись не смогла аутентифицировать.
1 ответ
Соль также должна быть в форме основания. Так что в вашем случае соль должна быть MTIzNDU2NzgK
echo "12345678" | base64
MTIzNDU2NzgK
Se [1] для некоторого контекста темы [1] https://issues.jboss.org/browse/ELY-1444