Files
NeveTimePanel/OIDC_CHANGES.md
2026-01-15 09:32:13 +06:00

5.4 KiB
Raw Blame History

Изменения OpenID Connect - ZITADEL

Что было сделано

1. Backend (Python/FastAPI)

backend/main.py

  • Упрощена инициализация OAuth для работы только с ZITADEL
  • Улучшена обработка callback с более детальным логированием
  • Добавлена проверка наличия userinfo в токене
  • Улучшена обработка ошибок OAuth
  • Исправлен импорт: starlette_client вместо fastapi_client (FastAPI основан на Starlette)

backend/oidc_config.py

  • Оставлен только ZITADEL провайдер
  • Настройка через переменные окружения:
    • ZITADEL_ISSUER - URL инстанса ZITADEL
    • ZITADEL_CLIENT_ID - ID приложения
    • ZITADEL_CLIENT_SECRET - Секретный ключ

backend/.env.example

  • Обновлён с настройками ZITADEL
  • Удалены старые провайдеры (Google, Microsoft, Discord, GitHub)

2. Frontend (React)

frontend/src/components/Auth.jsx

  • Динамическая загрузка OIDC провайдеров
  • Кнопка "Войти через ZITADEL" с иконкой 🔐
  • Автоматическое скрытие если ZITADEL не настроен

frontend/src/App.jsx

  • Обработка callback от ZITADEL в useEffect
  • Автоматическое сохранение токена
  • Очистка URL после входа

Удалено

  • frontend/src/components/AuthCallback.jsx - не используется

3. Документация

OPENID_CONNECT_SETUP.md

  • Полностью переписана для ZITADEL
  • Пошаговая инструкция по настройке
  • Примеры конфигурации
  • Troubleshooting

ZITADEL_QUICK_START.md (новый)

  • Краткая инструкция по быстрому старту
  • 4 простых шага для настройки
  • Решение типичных проблем

OIDC_CHANGES.md (этот файл)

  • Резюме всех изменений

Как использовать

Для разработчика

  1. Создайте приложение в ZITADEL
  2. Скопируйте backend/.env.example в backend/.env
  3. Заполните настройки ZITADEL
  4. Запустите backend и frontend
  5. Проверьте кнопку "Войти через ZITADEL"

Для пользователя

  1. Откройте страницу входа
  2. Нажмите "Войти через ZITADEL"
  3. Войдите в ZITADEL
  4. Автоматически попадёте в панель

Технические детали

Поток аутентификации

1. Пользователь → Кнопка ZITADEL
2. Frontend → GET /api/auth/oidc/zitadel/login
3. Backend → Redirect на ZITADEL
4. ZITADEL → Пользователь вводит логин/пароль
5. ZITADEL → Redirect на /api/auth/oidc/zitadel/callback?code=...
6. Backend → Обмен code на access_token
7. Backend → Получение userinfo
8. Backend → Создание/обновление пользователя
9. Backend → Генерация JWT токена
10. Backend → Redirect на frontend?token=...&username=...
11. Frontend → Сохранение токена в localStorage
12. Frontend → Автоматический вход

Структура пользователя OIDC

{
  "username": "john_doe",
  "password": "",
  "role": "user",
  "servers": [],
  "oidc_id": "zitadel:123456789012345678",
  "email": "john@example.com",
  "name": "John Doe",
  "picture": "https://avatar.url",
  "provider": "zitadel",
  "created_at": "2026-01-15T12:00:00"
}

API Endpoints

  • GET /api/auth/oidc/providers - Список доступных провайдеров
  • GET /api/auth/oidc/zitadel/login - Начало OAuth flow
  • GET /api/auth/oidc/zitadel/callback - Обработка callback

Зависимости

Backend

  • authlib==1.3.0 - OAuth2/OIDC клиент
  • httpx==0.26.0 - HTTP клиент

Frontend

  • axios - HTTP запросы (уже установлен)

Безопасность

  • PKCE (Proof Key for Code Exchange)
  • State parameter для CSRF защиты
  • Проверка redirect_uri
  • JWT токены с истечением
  • Хранение токенов в localStorage

Что дальше?

Возможные улучшения

  • Добавить refresh token
  • Добавить logout через ZITADEL
  • Добавить отображение аватара пользователя
  • Добавить связывание OIDC аккаунта с существующим
  • Добавить управление сессиями

Для продакшена

  • Использовать HTTPS
  • Настроить CORS правильно
  • Добавить rate limiting
  • Настроить логирование
  • Добавить мониторинг

Готово!

OpenID Connect с ZITADEL полностью настроен и готов к использованию!