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.1
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.1.tar.gz | 5.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_keycloak_oidc_auth-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 13.2 kB
Release files / django_keycloak_oidc_auth-0.1.1.tar.gz
| Download URL | django_keycloak_oidc_auth-0.1.1.tar.gz |
|---|---|
| Size | 5.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
262658ac744eb9f122096ba0fa5bf60896a65f04581ca368a075148b53c2764b
|
|
BLAKE2b-256 checksum How to use checksums |
b9b9ffe54d7d69b539a261a1fb41fc839df5c4165e6b1b611f5b6db0a60a7bcd
|
| 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.1-py3-none-any.whl
| Download URL | django_keycloak_oidc_auth-0.1.1-py3-none-any.whl |
|---|---|
| Size | 7.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e269fc69f40d66cfbdfe53fb92d9efccbc62b48da1a33ffda495d7a36a209aa6
|
|
BLAKE2b-256 checksum How to use checksums |
df1bfb0fb22456aaec8a468afbbb04f737cd2bbe52adc0f7a2017a81811aaa00
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.0
|