front to consta
clean dotnet backend
This commit is contained in:
137
README.md
137
README.md
@@ -1,37 +1,25 @@
|
||||
# Dex Demo Application
|
||||
|
||||
Демонстрационное приложение для аутентификации через DexAuthenticator в Kubernetes кластере с Deckhouse.
|
||||
Демонстрационное приложение для аутентификации через DexAuthenticator в Kubernetes (Deckhouse).
|
||||
|
||||

|
||||
|
||||
## Описание
|
||||
|
||||
Простое приложение, демонстрирующее интеграцию с DexAuthenticator:
|
||||
- **Backend (Python/FastAPI)**: Валидирует JWT токены, получает данные пользователя из PostgreSQL
|
||||
- **Frontend (React/Vite)**: Отображает информацию о пользователе и доступные ресурсы на основе ролей
|
||||
- **PostgreSQL**: Хранит пользователей, роли и доступные ссылки
|
||||
- **DexAuthenticator**: Обеспечивает аутентификацию через Dex
|
||||
- **Backend (Python/FastAPI)**: валидирует JWT, берет данные пользователя и роли из PostgreSQL
|
||||
- **Backend (.NET)**: функционально идентичен Python backend
|
||||
- **Frontend (React/Vite)**: отображает информацию о пользователе и доступные ресурсы
|
||||
- **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 отображает информацию о пользователе и доступные ресурсы
|
||||
1. Ingress/DexAuthenticator выполняет аутентификацию через Dex/IdP
|
||||
2. DexAuthenticator проксирует запросы и добавляет заголовки `X-Auth-Request-Email`, `X-Auth-Request-User`, `Authorization`
|
||||
3. Frontend запрашивает `/api/user-info`
|
||||
4. Backend валидирует JWT, получает данные из PostgreSQL и возвращает информацию о пользователе и доступных ресурсах
|
||||
|
||||

|
||||
|
||||
## Архитектура
|
||||
|
||||
@@ -58,10 +46,8 @@
|
||||
## Предварительные требования
|
||||
|
||||
- Kubernetes кластер с Deckhouse
|
||||
- Настроенный Dex по адресу `https://dex.127.0.0.1.sslip.io`
|
||||
- Docker
|
||||
- kubectl
|
||||
- make
|
||||
- Dex по адресу `https://dex.127.0.0.1.sslip.io`
|
||||
- Docker, kubectl, make
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
@@ -124,61 +110,23 @@ make clean
|
||||
|
||||
```
|
||||
.
|
||||
├── backend/ # Python бэкенд
|
||||
│ ├── main.py # FastAPI приложение
|
||||
│ ├── requirements.txt # Python зависимости
|
||||
│ └── Dockerfile # Docker образ
|
||||
├── frontend/ # React фронтенд
|
||||
│ ├── src/
|
||||
│ │ ├── App.jsx # Главный компонент
|
||||
│ │ └── App.css # Стили
|
||||
│ ├── nginx.conf # Nginx конфигурация
|
||||
│ └── Dockerfile # Docker образ
|
||||
├── db/ # База данных
|
||||
│ └── init.sql # SQL скрипт инициализации
|
||||
├── k8s/ # Kubernetes манифесты
|
||||
│ ├── namespace.yaml
|
||||
│ ├── postgres.yaml
|
||||
│ ├── backend.yaml
|
||||
│ ├── frontend.yaml
|
||||
│ ├── dex-authenticator.yaml
|
||||
│ └── ingress.yaml
|
||||
├── Makefile # Команды для сборки и развертывания
|
||||
└── README.md # Документация
|
||||
├── backend/ # Python backend (FastAPI)
|
||||
├── backend-dotnet/ # .NET backend (идентичен по логике)
|
||||
├── frontend/ # React frontend
|
||||
├── db/ # PostgreSQL init.sql
|
||||
├── k8s/ # Kubernetes манифесты
|
||||
├── Makefile
|
||||
└── README.md
|
||||
```
|
||||
|
||||
## Компоненты
|
||||
|
||||
### Backend (FastAPI)
|
||||
### Backend (Python/.NET)
|
||||
|
||||
**Эндпоинты:**
|
||||
- `GET /api/health` - Проверка здоровья сервиса
|
||||
- `GET /api/user-info` - Получение информации о пользователе
|
||||
|
||||
**Функциональность:**
|
||||
- Валидация JWT токенов от Dex (проверка подписи, issuer, exp)
|
||||
- Извлечение email пользователя из токена или заголовков
|
||||
- Получение данных пользователя из PostgreSQL (организация, полное имя)
|
||||
- Получение ролей пользователя
|
||||
- Получение доступных ссылок на основе ролей
|
||||
|
||||
### Frontend (React + Vite)
|
||||
|
||||
**Функциональность:**
|
||||
- Отображение информации о пользователе
|
||||
- Список ролей
|
||||
- Доступные ресурсы на основе ролей пользователя
|
||||
- Никакой логики аутентификации (вся аутентификация на стороне DexAuthenticator)
|
||||
|
||||
### База данных (PostgreSQL)
|
||||
|
||||
**Схема:**
|
||||
- `organizations` - Организации
|
||||
- `users` - Пользователи
|
||||
- `roles` - Роли
|
||||
- `user_roles` - Связь пользователей и ролей
|
||||
- `links` - Доступные ссылки
|
||||
- `role_links` - Связь ролей и ссылок
|
||||
- `GET /api/health` — проверка здоровья
|
||||
- `GET /api/user-info` — информация о пользователе и доступных ресурсах
|
||||
- Валидирует JWT (подпись, issuer, exp) и читает email/id
|
||||
- Забирает пользователя, роли и ссылки из PostgreSQL
|
||||
|
||||
### Тестовые данные
|
||||
|
||||
@@ -210,19 +158,15 @@ make clean
|
||||
|
||||
### Backend переменные окружения
|
||||
|
||||
- `DB_HOST` - Хост PostgreSQL (по умолчанию: `postgres`)
|
||||
- `DB_PORT` - Порт PostgreSQL (по умолчанию: `5432`)
|
||||
- `DB_NAME` - Имя БД (по умолчанию: `dexdemo`)
|
||||
- `DB_USER` - Пользователь БД (по умолчанию: `dexdemo`)
|
||||
- `DB_PASSWORD` - Пароль БД
|
||||
- `DEX_ISSUER` - URL Dex issuer (по умолчанию: `https://dex.127.0.0.1.sslip.io/`)
|
||||
- `DB_HOST`, `DB_PORT`, `DB_NAME`, `DB_USER`, `DB_PASSWORD`
|
||||
- `DEX_ISSUER` (по умолчанию: `https://dex.127.0.0.1.sslip.io/`)
|
||||
|
||||
### DexAuthenticator
|
||||
|
||||
Настройки в `k8s/dex-authenticator.yaml`:
|
||||
- `applicationDomain` - Домен приложения
|
||||
- `sendAuthorizationHeader` - Отправка заголовка Authorization с JWT
|
||||
- `keepUsersLoggedInFor` - Время сессии (24h)
|
||||
- `applicationDomain` — домен приложения
|
||||
- `sendAuthorizationHeader` — отправка заголовка Authorization с JWT
|
||||
- `keepUsersLoggedInFor` — время сессии
|
||||
|
||||
|
||||
## Разработка
|
||||
@@ -276,23 +220,6 @@ Frontend будет доступен на `http://localhost:5173` с прокс
|
||||
|
||||
## Дополнительная настройка
|
||||
|
||||
### Изменение тестовых пользователей
|
||||
|
||||
Отредактируйте `db/init.sql` или `k8s/postgres.yaml` (ConfigMap `postgres-init`), затем:
|
||||
|
||||
```bash
|
||||
kubectl delete pod -n navigator-demo -l app=postgres
|
||||
```
|
||||
|
||||
### Использование собственного домена
|
||||
|
||||
Измените `applicationDomain` в `k8s/dex-authenticator.yaml` и `host` в `k8s/ingress.yaml`
|
||||
|
||||
### Production deployment
|
||||
|
||||
Для production окружения:
|
||||
1. Используйте secrets для паролей БД
|
||||
3. Включите TLS сертификаты
|
||||
4. Настройте resource limits
|
||||
5. Добавьте HorizontalPodAutoscaler
|
||||
6. Используйте внешний PostgreSQL
|
||||
- Изменение тестовых пользователей: редактируйте `db/init.sql` или `k8s/postgres.yaml`, затем `kubectl delete pod -n navigator-demo -l app=postgres`
|
||||
- Собственный домен: обновите `applicationDomain` в `k8s/dex-authenticator.yaml` и `host` в `k8s/ingress.yaml`
|
||||
- Production: secrets для БД, TLS, resource limits, HPA, внешний PostgreSQL
|
||||
|
||||
Reference in New Issue
Block a user