# Диаграмма последовательности аутентификации ```mermaid sequenceDiagram participant User as Пользователь participant Browser as Браузер participant Ingress as Nginx Ingress participant DexAuth as DexAuthenticator
(OAuth2 Proxy) participant Frontend as Frontend
(React SPA) participant Backend as Backend
(FastAPI) participant Dex as Dex
(Proxy IdP) participant BlitzIdP as Blitz IdP
(Основной IdP) participant LDAP as LDAP
(Резервный IdP) participant PostgreSQL as PostgreSQL Note over User, PostgreSQL: Процесс аутентификации пользователя %% Пользователь обращается к приложению User->>Browser: 1. Открывает python-navigator-demo.127.0.0.1.sslip.io Browser->>Ingress: 2. HTTPS запрос к приложению Ingress->>DexAuth: 3. Проверка аутентификации через auth-url alt Сессия не найдена или истекла DexAuth->>DexAuth: 4. Проверка session cookie DexAuth->>Dex: 5. Перенаправление на аутентификацию (HTTP 302) Dex->>BlitzIdP: 6. Запрос аутентификации alt Blitz IdP недоступен Dex->>LDAP: 7a. Переключение на резервный IdP LDAP-->>Dex: 7b. Ответ от LDAP else Blitz IdP доступен BlitzIdP-->>Dex: 7c. Ответ от Blitz IdP end Dex-->>DexAuth: 8. Возврат токенов (access_token, refresh_token) DexAuth->>DexAuth: 9. Сохранение токенов в сессии DexAuth-->>Ingress: 10. Установка заголовков (X-Auth-Request-User, X-Auth-Request-Email, Authorization) end Ingress->>Frontend: 11. Перенаправление на Frontend с заголовками Frontend-->>Browser: 12. Загрузка React приложения Browser-->>User: 13. Отображение приложения Note over User, PostgreSQL: Взаимодействие с Backend через API %% Пользователь взаимодействует с приложением User->>Browser: 14. Взаимодействие с интерфейсом Browser->>Frontend: 15. Клик/действие пользователя Frontend->>Ingress: 16. API запрос к /api/user-info Ingress->>DexAuth: 17. Проверка аутентификации для API DexAuth->>DexAuth: 18. Проверка session cookie DexAuth->>DexAuth: 19. Извлечение токенов из сессии alt Токен истек DexAuth->>Dex: 20. Обновление access token через refresh_token Dex->>BlitzIdP: 21. Обновление через основной IdP alt Blitz IdP недоступен Dex->>LDAP: 22a. Обновление через LDAP LDAP-->>Dex: 22b. Новый токен от LDAP else Blitz IdP доступен BlitzIdP-->>Dex: 22c. Новый токен от Blitz IdP end Dex-->>DexAuth: 23. Новый access token DexAuth->>DexAuth: 24. Обновление сессии end DexAuth-->>Ingress: 25. Установка заголовков (Authorization: Bearer JWT) Ingress->>Backend: 26. Проксирование запроса с Authorization header Backend->>Backend: 27. Валидация JWT токена через Dex JWKS Backend->>Backend: 28. Извлечение email из токена Backend->>PostgreSQL: 29. Запрос данных пользователя PostgreSQL-->>Backend: 30. Данные пользователя (роли, организация, ссылки) Backend-->>Ingress: 31. JSON ответ с данными пользователя Ingress-->>Frontend: 32. Ответ с данными Frontend-->>Browser: 33. Обновление интерфейса Browser-->>User: 34. Отображение информации о пользователе Note over User, PostgreSQL: Преимущества архитектуры Note right of DexAuth: ✅ SPA не хранит токены
✅ Автоматическое обновление токенов
✅ Безопасность на уровне инфраструктуры
✅ Прозрачность для приложения
✅ JWT валидация на Backend
✅ Ролевая модель в PostgreSQL ```