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"
Authentication backend
AUTHENTICATION_BACKENDS = [
"django_keycloak_oidc_auth.backends.KeycloakBackend",
"django.contrib.auth.backends.ModelBackend",
]
URL-маршруты
Добавьте маршруты в urls.py вашего проекта:
from django.urls import path
from django_keycloak_oidc_auth.views import (
KeycloakLoginView,
KeycloakCallbackView,
KeycloakLogoutView,
)
urlpatterns = [
path("oidc/login/", KeycloakLoginView.as_view(), name="oidc_login"),
path("oidc/callback/", KeycloakCallbackView.as_view(), name="oidc_callback"),
path("oidc/logout/", KeycloakLogoutView.as_view(), name="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 # версия пакета
├── backends.py # KeycloakBackend
├── config.py # OIDC endpoints из Django settings
└── views.py # login, callback, logout views
Разработка
# установка зависимостей
uv sync
# editable-установка в виртуальное окружение
uv pip install -e .
Metadata
Release files for django-keycloak-oidc-auth 0.1.0
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.0.tar.gz | 5.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_keycloak_oidc_auth-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 8.5 kB
Release files / django_keycloak_oidc_auth-0.1.0.tar.gz
| Download URL | django_keycloak_oidc_auth-0.1.0.tar.gz |
|---|---|
| Size | 5.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9c1a7f2dcf7848342bc9ea6bb6247cb17143030220a8d5a60ce75cea82b5239d
|
|
BLAKE2b-256 checksum How to use checksums |
8da8e29c7ecd33259699495216ee8a99c0a25f09d794d915e81e232525b65efe
|
| 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.0-py3-none-any.whl
| Download URL | django_keycloak_oidc_auth-0.1.0-py3-none-any.whl |
|---|---|
| Size | 3.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
86c26bc7010189df08f4d43fc47c1307e86c33807511162b18c6b7d5008c9807
|
|
BLAKE2b-256 checksum How to use checksums |
5036aeda322361a3503e6e975bf77b050dc07f9713fddf51bb6954eabbc4fef4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.0
|