Add SSO
This commit is contained in:
150
OIDC_CHANGES.md
Normal file
150
OIDC_CHANGES.md
Normal 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 полностью настроен и готов к использованию!
|
||||
Reference in New Issue
Block a user