django-keycloak-oidc-auth
Библиотека для интеграции Django с Keycloak через OpenID Connect (OIDC). Пакет предоставляет authentication backend и готовые view для входа, callback и выхода.
Построен на mozilla-django-oidc и Django 4.
Возможности
- OIDC-авторизация через Keycloak (authorization code flow)
- Автоматическое создание пользователей Django при первом входе
- Поиск существующих пользователей по email из OIDC claims
- Назначение прав staff/superuser для указанного email
- Готовые view для login, callback и logout
Требования
- Python >= 3.10
- Django 4.x
- Работающий Keycloak realm с настроенным OIDC-клиентом
Установка
Из исходников (uv)
git clone <url-репозитория>
cd django_keycloak_oidc_auth
uv sync
В существующий Django-проект
uv add django-keycloak-oidc-auth
# или
pip install django-keycloak-oidc-auth
Настройка Keycloak
- Создайте клиент в нужном realm (тип: OpenID Connect).
- Включите Standard flow (Authorization Code).
- Укажите Valid redirect URIs, например:
https://your-app.example.com/oidc/callback/ http://localhost:8000/oidc/callback/ - Сохраните Client ID и Client Secret — они понадобятся в настройках Django.
Настройка Django
Переменные окружения / settings.py
# Keycloak
DKA_BASE_URL = "keycloak.example.com" # хост без https://
DKA_REALM = "my-realm"
DKA_CLIENT_ID = "django-app"
DKA_CLIENT_SECRET = "your-client-secret"
# Необязательно: email пользователя, которому при первом входе
# выдаются is_staff и is_superuser
DKA_SUPER_USER_EMAIL = "admin@example.com"
INSTALLED_APPS и backend
INSTALLED_APPS = [
# ...
"django_keycloak_oidc_auth",
]
AUTHENTICATION_BACKENDS = [
"django_keycloak_oidc_auth.backends.KeycloakBackend",
"django.contrib.auth.backends.ModelBackend",
]
URL-маршруты
Подключите встроенные маршруты app в urls.py вашего проекта:
from django.urls import include, path
urlpatterns = [
path("oidc/", include("django_keycloak_oidc_auth.urls")),
]
Будут доступны маршруты:
/oidc/login//oidc/callback//oidc/logout/
Сессии
Убедитесь, что в проекте настроены сессии — view сохраняют oidc_state и oidc_refresh_token в session:
SESSION_ENGINE = "django.contrib.sessions.backends.db" # или другой подходящий backend
Как это работает
sequenceDiagram
participant Browser
participant Django
participant Keycloak
Browser->>Django: GET /oidc/login/
Django->>Browser: Redirect на Keycloak (state в session)
Browser->>Keycloak: Авторизация
Keycloak->>Browser: Redirect /oidc/callback/?code=...&state=...
Browser->>Django: GET /oidc/callback/
Django->>Keycloak: Обмен code на access_token
Django->>Django: authenticate(access_token=...)
Django->>Browser: login + redirect на /
- Пользователь переходит на
/oidc/login/. - Приложение генерирует
state, сохраняет его в сессии и перенаправляет на Keycloak. - После успешной авторизации Keycloak возвращает пользователя на
/oidc/callback/сcodeиstate. - Приложение проверяет
state, обмениваетcodeна токены и вызываетauthenticate()сaccess_token. - Backend находит или создаёт пользователя Django и выполняет
login().
Справочник настроек
| Параметр | Обязательный | Описание |
|---|---|---|
DKA_BASE_URL |
да | Хост Keycloak (без схемы), например keycloak.example.com |
DKA_REALM |
да | Имя realm |
DKA_CLIENT_ID |
да | Client ID OIDC-клиента |
DKA_CLIENT_SECRET |
да | Client secret OIDC-клиента |
DKA_SUPER_USER_EMAIL |
нет | Email, которому при создании выдаются is_staff и is_superuser |
На основе этих параметров формируются OIDC endpoints:
- Authorization:
https://{DKA_BASE_URL}/realms/{DKA_REALM}/protocol/openid-connect/auth - Token:
.../token - Userinfo:
.../userinfo - JWKS:
.../certs - Logout:
.../logout
Структура пакета
django_keycloak_oidc_auth/
├── __init__.py # версия пакета
├── apps.py # AppConfig для Django
├── backends.py # KeycloakBackend
├── config.py # OIDC endpoints из Django settings
├── urls.py # встроенные URL-маршруты app
└── views.py # login, callback, logout views
Разработка
# установка зависимостей
uv sync
# editable-установка в виртуальное окружение
uv pip install -e .
Metadata
Release files for django-keycloak-oidc-auth 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django_keycloak_oidc_auth-0.1.2.tar.gz | 5.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_keycloak_oidc_auth-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 13.2 kB
Release files / django_keycloak_oidc_auth-0.1.2.tar.gz
| Download URL | django_keycloak_oidc_auth-0.1.2.tar.gz |
|---|---|
| Size | 5.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1b27fc953f36b1fa4c74e5a15ba3bc3d0a6597cb125885cd3c622a29e8f02819
|
|
BLAKE2b-256 checksum How to use checksums |
37ff509e7b6172fa4ecc7c48fddcbc407286ea255026dbeda00bde898a70b44b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.0
|
Release files / django_keycloak_oidc_auth-0.1.2-py3-none-any.whl
| Download URL | django_keycloak_oidc_auth-0.1.2-py3-none-any.whl |
|---|---|
| Size | 7.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6cf1c46a252c30c5db66574104ddd2082645ab22c1545e2aac19ebb800ae0415
|
|
BLAKE2b-256 checksum How to use checksums |
51548d0b9deb8a810d761069af19c924f1cef78e856f65fe786dacc81c23ffbb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.0
|