Skip to main content

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

  1. Создайте клиент в нужном realm (тип: OpenID Connect).
  2. Включите Standard flow (Authorization Code).
  3. Укажите Valid redirect URIs, например:
    https://your-app.example.com/oidc/callback/
    http://localhost:8000/oidc/callback/
    
  4. Сохраните 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"
OIDC_VERIFY_SSL = True

# Необязательно: 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 на /
  1. Пользователь переходит на /oidc/login/.
  2. Приложение генерирует state, сохраняет его в сессии и перенаправляет на Keycloak.
  3. После успешной авторизации Keycloak возвращает пользователя на /oidc/callback/ с code и state.
  4. Приложение проверяет state, обменивает code на токены и вызывает authenticate() с access_token.
  5. 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-клиента
OIDC_VERIFY_SSL нет Проверять SSL-сертификат при запросах к Keycloak. По умолчанию True
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.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-keycloak-oidc-auth 0.1.3
File Size Uploaded
django_keycloak_oidc_auth-0.1.3.tar.gz 6.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-keycloak-oidc-auth 0.1.3
File Interpreter ABI Platform
django_keycloak_oidc_auth-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 13.5 kB

Release files / django_keycloak_oidc_auth-0.1.3.tar.gz

Download URL django_keycloak_oidc_auth-0.1.3.tar.gz
Size 6.0 kB
Tags Source
SHA-256 checksum
How to use checksums
713b9859944890afc1d4d54e84c83e9c622dd5b9415615b4c5999b2c895caccb
BLAKE2b-256 checksum
How to use checksums
d8ba585a084ce195e4602230af24c513ab6e7bd264afb071a85d3fa12ca82ded
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.3-py3-none-any.whl

Download URL django_keycloak_oidc_auth-0.1.3-py3-none-any.whl
Size 7.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2c5d5bcb31aeffdfc10cae47b9fc0feefae47fb22b459a90320462c9974c7f8f
BLAKE2b-256 checksum
How to use checksums
a4bd8d5ed900c911ee5ce7094b959015873ff1a1e1a0275ca63df09816a61117
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.0

Release history Release notifications | RSS feed

0.1.5

2 release files

0.1.4

2 release files

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page