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