4.7 KiB
4.7 KiB
Диаграмма последовательности аутентификации
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