Импорт хешированных паролей в KeycloakPython

Программы на Python
Ответить
Anonymous
 Импорт хешированных паролей в Keycloak

Сообщение Anonymous »

Я хочу создать пользователя, используя уже хешированный пароль (с помощью argon2). Это необходимо для проверки процесса миграции пользователей из базы данных моего приложения в Keycloak.
Я перешел в раздел «Аутентификация» > «Политики» и настроил алгоритм хеширования как argon2. Таким образом, когда я создаю «обычный» пароль, он автоматически хэшируется с argon2.
Изображение

Я сгенерировал хэш, используя argon2, на платформе argon2.online. Параметры, которые я использовал, были такими же, как и в Keycloak по умолчанию:
  • Ввод обычного текста: пароль
  • Salt: abcd1234
  • Коэффициент параллелизма: 1
  • Затраты памяти: 7168
  • Итерации: 5
  • Длина хэша: 32
При использовании Argon2id результат был следующим: $argon2id$v=19$m=7168,t=5,p=1$YWJjZDEyMzQ$M2pBlbaI2O0icDQslGeP1dTAVUxdnzx7GZr9N1Fdd04
Изображение

Я использую следующий код для создания случайного пользователя и последующего входа в систему:

Код: Выделить всё

import keycloak
import json
from datetime import datetime

password = 'password'

argon2_data = {
'plain_text_input': password,
'salt': 'abcd1234',
'parallelism': 1,
'memory_cost': 7168,
'iterations': 5,
'hash_length': 32,
'hash': '$argon2id$v=19$m=7168,t=5,p=1$YWJjZDEyMzQ$M2pBlbaI2O0icDQslGeP1dTAVUxdnzx7GZr9N1Fdd04',
'version': '1.3',
}

argon2_data['hash_parts'] = argon2_data['hash'].split('$')

def create_user():

ts = datetime.now().strftime("%H%M%S")

username = f"john{ts}"

basic_credentials = {
'type': 'password',
'temporary': False,
'value': password,
}

argon2_credentials = {
'type': 'password',
'temporary': False,
'secretData': json.dumps({
'value': argon2_data['hash_parts'][-1],
'salt': argon2_data['hash_parts'][-2],
}),
'credentialData': json.dumps({
'hashIterations': argon2_data['iterations'],
'algorithm': 'argon2',
'additionalParameters': {
'hashLength': [str(argon2_data['hash_length'])],
'memory': [str(argon2_data['memory_cost'])],
'type': ['id'],
'version': [argon2_data['version']],
'parallelism': [str(argon2_data['parallelism'])],
}
})
}

user_data = {
'attributes': {
'custom_key': 'custom_value'
},
'credentials': [
#basic_credentials,
argon2_credentials,
],
'username': username,
'firstName': 'John',
'lastName': 'Doe',
'email': f'{username}@doe.com.br',
'emailVerified': True,
'enabled': True
}

print(user_data)

keycloak.create_user(user_data)

return user_data

user = create_user()

keycloak.test_login(user['username'], password)
Создание пользователя с использованием Basic_credentials позволяет мне немедленно успешно войти в систему. Однако создание пользователя с использованием argon2_credentials приводит к тому, что при входе в систему возвращается ошибка «неверные учетные данные пользователя».
Что я могу делать неправильно?

Подробнее здесь: https://stackoverflow.com/questions/798 ... o-keycloak
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»