# Диаграмма последовательности аутентификации

```mermaid
sequenceDiagram
    participant User as Пользователь
    participant Browser as Браузер
    participant Ingress as Nginx Ingress
    participant DexAuth as DexAuthenticator<br/>(OAuth2 Proxy)
    participant Frontend as Frontend<br/>(React SPA)
    participant Backend as Backend<br/>(FastAPI)
    participant Dex as Dex<br/>(Proxy IdP)
    participant BlitzIdP as Blitz IdP<br/>(Основной IdP)
    participant LDAP as LDAP<br/>(Резервный 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 не хранит токены<br/>✅ Автоматическое обновление токенов<br/>✅ Безопасность на уровне инфраструктуры<br/>✅ Прозрачность для приложения<br/>✅ JWT валидация на Backend<br/>✅ Ролевая модель в PostgreSQL
```
