Files
python-oauth2-proxy-k8s/FINAL_STATUS.md
2025-10-01 15:04:07 +05:00

2.7 KiB
Raw Blame History

Финальная архитектура в k8s:

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)
  5. После аутентификации в Blitz IdP → возврат в Dex
  6. После аутентификации в Dex → возврат в приложение
  7. Frontend загружается с аутентификацией
  8. Frontend делает запрос к /api/user-info
  9. Backend получает JWT токен и валидирует его
  10. Backend возвращает данные пользователя из PostgreSQL
  11. 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)