Массовое создание пользователей в Keycloak через Admin API
Project description
Keycloak User Generator
Пакет для массового создания пользователей в Keycloak через Admin API.
Версия: 2.0.0
Статус: Готов к использованию
Лицензия: MIT
Описание
Инструмент предназначен для автоматизированного создания учётных записей в Keycloak через Admin API. Поддерживает конфигурацию через YAML-файлы и переменные окружения, идемпотентное создание пользователей и экспорт учётных данных в различных форматах.
Основные возможности:
- Массовое создание пользователей (от 1 до N за один запуск)
- Генерация безопасных паролей (настраиваемая длина и символы)
- Экспорт в CSV, TXT, JSON
- Идемпотентность (повторный запуск не создаёт дубликаты)
- Режим сухой проверки (dry-run)
- Валидация конфигурации
- Поддержка переменных окружения
Требования
- Python 3.12 или выше
- Доступ к Keycloak Admin API
- Учётная запись администратора Keycloak с правами на создание пользователей
Установка
Вариант 1: Установка из PyPI
pip install kk-userator
Вариант 2: Установка из исходников
# Клонирование репозитория
git clone <repository-url>
cd kk-userator
# Создание виртуального окружения
python -m venv .venv
source .venv/bin/activate # Linux/macOS
.venv\Scripts\activate # Windows
# Установка зависимостей
pip install -r requirements.txt
# Или установка как пакета
pip install .
Вариант 3: Режим разработки
# Установка с dev-зависимостями
pip install -e ".[dev]"
# Запуск тестов
pytest
# Линтинг
ruff check keycloak_userator/
# Проверка типов
mypy keycloak_userator/
Зависимости:
python-keycloak≥3.0.0 — Keycloak Admin APIpython-dotenv≥1.0.0 — Загрузка .env файловPyYAML≥6.0 — YAML конфигурацияpytest≥7.0 — Тестирование (dev)ruff≥0.1.0 — Линтинг (dev)mypy≥1.0.0 — Проверка типов (dev)bandit≥1.7.0 — Проверка безопасности (dev)
Настройка
1. Переменные окружения (.env)
cp .env.example .env
Отредактируйте .env:
# URL сервера Keycloak
KEYCLOAK_URL=https://keycloak.example.com
# Учётные данные администратора
KEYCLOAK_USERNAME=admin
KEYCLOAK_PASSWORD=your_password_here
# Realm (опционально, по умолчанию: master)
KEYCLOAK_REALM=master
# Префикс для логинов (опционально)
KEYCLOAK_LOGIN_PREFIX=user
# Домен для email (опционально)
KEYCLOAK_EMAIL_DOMAIN=example.com
# Количество пользователей (опционально)
KEYCLOAK_COUNT=100
2. Конфигурация (config.yaml)
# Параметры пользователей
user:
login_prefix: "user" # Префикс для логинов
email_domain: "example.com" # Домен для email
first_name: "User" # Имя по умолчанию
last_name_template: "User {number}" # Шаблон фамилии
group_name: "default-users" # Группа в Keycloak
default_realm: "master" # Realm по умолчанию
# Параметры генерации паролей
password:
length: 12 # Длина пароля
use_lowercase: true # Строчные буквы
use_uppercase: true # Заглавные буквы
use_digits: true # Цифры
use_special: false # Спецсимволы
# Параметры по умолчанию
defaults:
count: 100 # Количество пользователей
start_number: 1 # Начальный номер
output_dir: "output" # Директория для файлов
# Логирование
logging:
file: "keycloak_generator.log"
level: "INFO"
format: "%(asctime)s - %(levelname)s - %(message)s"
date_format: "%Y-%m-%d %H:%M:%S"
Использование
Базовый запуск
# Интерактивный режим (запросит данные для подключения)
python -m keycloak_userator.cli
# С переменными окружения из .env
python -m keycloak_userator.cli --no-interactive
Параметры командной строки
python -m keycloak_userator.cli [OPTIONS]
Options:
--count, -n INTEGER Количество пользователей (по умолчанию: 100)
--start, -s INTEGER Начальный номер (по умолчанию: 1)
--dry-run Режим проверки (без создания)
--output-dir, -o PATH Директория для файлов
--no-interactive Использовать переменные окружения
--config, -c PATH Путь к config.yaml
--help Показать справку
Примеры
# Создать 50 пользователей
python -m keycloak_userator.cli --count 50
# Создать с 101 по 200
python -m keycloak_userator.cli --count 100 --start 101
# Режим проверки (dry-run)
python -m keycloak_userator.cli --dry-run --count 10
# С переменными окружения
python -m keycloak_userator.cli --no-interactive
# Альтернативная конфигурация
python -m keycloak_userator.cli --config configs/another_project.yaml
Форматы выходных файлов
После выполнения в директории output/ создаются файлы:
| Файл | Формат | Назначение |
|---|---|---|
credentials_*.csv |
CSV | Импорт в другие системы |
credentials_*.txt |
TXT | Человекочитаемый формат |
credentials_*.json |
JSON | Программная обработка |
Пример CSV:
username,password,email,firstName,lastName,enabled
user_1,A7k2Bm9p,user_1@example.com,User,User 1,True
user_2,X3mN9qR2,user_2@example.com,User,User 2,True
Интеграция
OpenEDX / Moodle / Другие LMS
После создания пользователей в Keycloak:
- Пользователь переходит на сайт LMS
- Нажимает «Войти через Keycloak» (SSO)
- Keycloak аутентифицирует пользователя
- LMS автоматически создаёт локальную учётную запись
- Пользователь получает доступ к курсу
Дополнительная настройка не требуется!
Безопасность
Хранение учётных данных
Рекомендации:
- Не храните файлы с паролями в открытом виде
- Используйте шифрование при передаче
- Удаляйте файлы после передачи пользователям
- Ограничивайте доступ к файлам (
chmod 600)
Переменные окружения
Не коммитьте .env в git! Файл уже в .gitignore.
# Ограничение доступа (Linux)
chmod 600 .env
# Проверка
ls -l .env
# -rw------- 1 user user ... .env
Тестирование
# Все тесты
pytest
# С покрытием
pytest --cov=keycloak_userator --cov-report=html
# Конкретный модуль
pytest tests/test_password.py -v
Покрытие кода: 92%+
Статический анализ
# Линтинг
ruff check keycloak_userator/
# Проверка типов
mypy keycloak_userator/
# Безопасность
bandit -r keycloak_userator/
Структура проекта
kk-userator/
├── keycloak_userator/ # Пакет
│ ├── __init__.py # Экспорт классов
│ ├── cli.py # Точка входа
│ ├── config.py # Конфигурация
│ ├── types.py # Типы данных
│ ├── password.py # Генератор паролей
│ ├── exporter.py # Экспорт данных
│ └── keycloak_client.py # Keycloak API
├── tests/ # Тесты
├── docs/ # Документация
├── pyproject.toml # Конфигурация сборки
├── requirements.txt # Зависимости
├── README.md # Этот файл
└── CHANGELOG.md # История версий
Обработка ошибок
| Ошибка | Причина | Решение |
|---|---|---|
401 Unauthorized |
Неверные учётные данные | Проверить логин/пароль |
403 Forbidden |
Недостаточно прав | Требуется роль realm-management |
ConnectionError |
Keycloak недоступен | Проверить сеть, URL |
ValidationError |
Ошибка в config.yaml | Проверить синтаксис YAML |
Changelog
См. CHANGELOG.md
Лицензия
MIT License — см. LICENSE файл.
Поддержка
- Документация:
docs/ - Issues: GitHub repository
- Email: разработчику
Версия: 2.0.0 Дата: 2026-03-28
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kk_userator-2.0.0-py3-none-any.whl.
File metadata
- Download URL: kk_userator-2.0.0-py3-none-any.whl
- Upload date:
- Size: 19.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
99e86d0cf51f26485a15fea3fb9a0874b7a7ac6686abb7913e9fe96bb3ed187d
|
|
| MD5 |
6d638bffc486b62c4f4e6d5f00c92709
|
|
| BLAKE2b-256 |
a9e0fcb31c317754cd5a51747af0a91878a156789a64a08ea5fd9967f61d9eb7
|