This commit is contained in:
2026-01-15 09:32:13 +06:00
parent 14f020e819
commit 303d38f28e
19 changed files with 2072 additions and 14 deletions

150
OIDC_CHANGES.md Normal file
View File

@@ -0,0 +1,150 @@
# ✅ Изменения 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
```json
{
"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 полностью настроен и готов к использованию!