151 lines
5.4 KiB
Markdown
151 lines
5.4 KiB
Markdown
# ✅ Изменения 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 полностью настроен и готов к использованию!
|