5.4 KiB
5.4 KiB
✅ Изменения 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 инстанса ZITADELZITADEL_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 (этот файл)
- ✅ Резюме всех изменений
Как использовать
Для разработчика
- Создайте приложение в ZITADEL
- Скопируйте
backend/.env.exampleвbackend/.env - Заполните настройки ZITADEL
- Запустите backend и frontend
- Проверьте кнопку "Войти через ZITADEL"
Для пользователя
- Откройте страницу входа
- Нажмите "Войти через ZITADEL"
- Войдите в ZITADEL
- Автоматически попадёте в панель
Технические детали
Поток аутентификации
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 flowGET /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 полностью настроен и готов к использованию!