Генерация соленого / хешированного пароля для аутентификации на основе контейнера 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

Другие вопросы по тегам