add sequenceDiagram

This commit is contained in:
2025-10-01 15:38:34 +05:00
parent 5033811421
commit b558125337
6 changed files with 133 additions and 72 deletions

View File

@ -1,58 +0,0 @@
### **Финальная архитектура в k8s:**
```mermaid
flowchart
A["python-navigator-demo.127.0.0.1.sslip.io"] --> B["Единый Ingress + DexAuthenticator<br/>(аутентификация)"]
B --> C["Frontend Service"]
B --> D["DexAuthenticator Service"]
B --> E["Backend Service"]
C --> F["Frontend Pods"]
D --> G["DexAuthenticator Pods"]
E --> H["Backend Pods"]
H --> I["PostgreSQL Service"]
classDef ingress fill:#e1f5fe
classDef service fill:#f3e5f5
classDef pod fill:#e8f5e8
classDef database fill:#fff3e0
class A,B ingress
class C,D,E service
class F,G,H pod
class I database
```
### **Правильный поток аутентификации:**
1. Пользователь заходит на `https://python-navigator-demo.127.0.0.1.sslip.io`
2. DexAuthenticator проверяет аутентификацию
3. Если не аутентифицирован → редирект на Dex (HTTP 302)
4. Если не аутентифицирован в Dex → редирект на Blitz IdP (HTTP 302)
4. После аутентификации в Blitz IdP → возврат в Dex
4. После аутентификации в Dex → возврат в приложение
5. Frontend загружается с аутентификацией
6. Frontend делает запрос к `/api/user-info`
7. Backend получает JWT токен и валидирует его
8. Backend возвращает данные пользователя из PostgreSQL
9. Frontend отображает информацию о пользователе и доступные ресурсы
### **Для тестирования:**
**Откройте браузер и перейдите на `https://python-navigator-demo.127.0.0.1.sslip.io`**
Вас должно перенаправить на Dex для аутентификации. После входа вы увидите:
- Информацию о пользователе (email, полное имя, организация)
- Его роли (admin, developer, user, manager)
- Доступные ресурсы на основе ролей
### **Тестовые пользователи:**
Убедитесь, что в вашем Dex и внешнем IdP есть пользователи:
- `admin@example.com` - полный доступ ко всем ресурсам
- `developer@example.com` - технические ресурсы (CI/CD, Git, Docs, Wiki)
- `user@example.com` - только база знаний
- `manager@example.com` - управленческие ресурсы (Проекты, Отчеты, Wiki)

Binary file not shown.

View File

@ -12,6 +12,27 @@
- **PostgreSQL**: Хранит пользователей, роли и доступные ссылки
- **DexAuthenticator**: Обеспечивает аутентификацию через Dex
## Работа приложения
1. Пользователь открывает `https://python-navigator-demo.127.0.0.1.sslip.io`
2. Ingress перенаправляет на DexAuthenticator для аутентификации
3. Если не аутентифицирован происходит редирект на Dex (HTTP 302) для входа
4. Если не аутентифицирован в Dex происходит редирект на Blitz IdP (HTTP 302) для входа
5. После аутентификации в Blitz IdP → возврат в Dex
6. После успешной аутентификации Dex возвращает токен в DexAuthenticator
7. DexAuthenticator устанавливает заголовки (`X-Auth-Request-Email`,`X-Auth-Request-User`, `Authorization`) и cookie
8. После успешной аутентификации Frontend загружается
9. Frontend делает запрос к `/api/user-info`
10. DexAuthenticator устанавливает заголовки (`X-Auth-Request-Email`,`X-Auth-Request-User`, `Authorization`) и cookie
11. Backend:
- Валидирует JWT токен из заголовка `Authorization`
- Извлекает email/id пользователя
- Получает данные из PostgreSQL
- Возвращает информацию о пользователе и доступных ресурсах
12. Frontend отображает информацию о пользователе и доступные ресурсы
![Диаграмма последовательности](sequenceDiagram.png)
## Архитектура
```
@ -63,6 +84,33 @@ make deploy
Приложение будет доступно по адресу: `https://python-navigator-demo.127.0.0.1.sslip.io`
#### Финальная архитектура в Kubernetes:
```mermaid
flowchart
A["python-navigator-demo.127.0.0.1.sslip.io"] --> B["Единый Ingress + DexAuthenticator<br/>(аутентификация)"]
B --> C["Frontend Service"]
B --> D["DexAuthenticator Service"]
B --> E["Backend Service"]
C --> F["Frontend Pods"]
D --> G["DexAuthenticator Pods"]
E --> H["Backend Pods"]
H --> I["PostgreSQL Service"]
classDef ingress fill:#e1f5fe
classDef service fill:#f3e5f5
classDef pod fill:#e8f5e8
classDef database fill:#fff3e0
class A,B ingress
class C,D,E service
class F,G,H pod
class I database
```
### 3. Удаление приложения
```bash
@ -176,20 +224,6 @@ make clean
- `sendAuthorizationHeader` - Отправка заголовка Authorization с JWT
- `keepUsersLoggedInFor` - Время сессии (24h)
## Работа приложения
1. Пользователь открывает `https://python-navigator-demo.127.0.0.1.sslip.io`
2. Ingress перенаправляет на DexAuthenticator для аутентификации
3. DexAuthenticator редиректит на Dex для входа
4. После успешной аутентификации Dex возвращает токен
5. DexAuthenticator устанавливает заголовки (`X-Auth-Request-Email`,`X-Auth-Request-User`, `Authorization`)
6. Frontend загружается и делает запрос к `/api/user-info`
7. Backend:
- Валидирует JWT токен
- Извлекает email пользователя
- Получает данные из PostgreSQL
- Возвращает информацию о пользователе и доступных ресурсах
8. Frontend отображает полученные данные
## Разработка

BIN
README.pdf Normal file

Binary file not shown.

85
sequenceDiagram.md Normal file
View File

@ -0,0 +1,85 @@
# Диаграмма последовательности аутентификации
```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
```

BIN
sequenceDiagram.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB