# 🔐 Secure Proxy - Reverse Proxy avec OIDC Un service complet de reverse proxy qui protĂšge les services non-OIDC derriĂšre une authentification Keycloak, avec panel admin pour gĂ©rer les services et les redirections. ## ✹ FonctionnalitĂ©s - **Authentification OIDC** : IntĂ©gration complĂšte avec Keycloak - **Reverse Proxy** : Cache les services internes derriĂšre une URL publique - **Panel Admin** : Interface web complĂšte pour gĂ©rer les services - **Gestion des Services** : CrĂ©er, modifier, supprimer les services protĂ©gĂ©s - **Logs d'Audit** : Tracer toutes les actions administrateur - **Logs d'AccĂšs** : Enregistrer tous les accĂšs aux services - **ContrĂŽle d'Authentification** : Choisir quels services nĂ©cessitent l'authentification - **SĂ©curitĂ©** : Rate limiting, CSRF protection, headers de sĂ©curitĂ© ## 📩 Installation ### PrĂ©requis - Node.js 16+ - npm - Keycloak instance (pour l'authentification) - SQLite (inclus via npm) ### Étapes d'installation 1. **Cloner et installer les dĂ©pendances** ```bash cd /Users/alexandre/projet/openidv2 npm install ``` 2. **Configuration** Copier `.env.example` vers `.env` et configurer : ```bash cp .env.example .env ``` Éditer `.env` avec vos paramĂštres : ```env # Server PORT=3000 NODE_ENV=production PROXY_URL=https://secure.k2r.ovh # OIDC Configuration OIDC_ISSUER=https://keycloak.example.com/auth/realms/master OIDC_CLIENT_ID=openidv2-client OIDC_CLIENT_SECRET=your_secret_here OIDC_CALLBACK_URL=https://secure.k2r.ovh/callback # Admin ADMIN_USERNAME=admin@example.com ADMIN_PASSWORD=your_secure_password # Session SESSION_SECRET=generate_random_string_here ``` 3. **Initialiser la base de donnĂ©es** ```bash npm run init-db ``` 4. **Optionnel : Charger des donnĂ©es de test** ```bash npm run seed-db ``` ## 🚀 DĂ©marrage ### DĂ©veloppement ```bash npm run dev ``` ### Production ```bash npm start ``` Le serveur dĂ©marre sur `http://localhost:3000` (ou le port configurĂ©). ## 🔑 Configuration Keycloak ### CrĂ©er un client OIDC dans Keycloak 1. Aller dans **Clients** → **Create** 2. **Client ID** : `openidv2-client` 3. **Client Protocol** : openid-connect 4. **Root URL** : `https://secure.k2r.ovh` 5. Dans **Settings** : - **Valid Redirect URIs** : `https://secure.k2r.ovh/callback` - **Valid Post Logout Redirect URIs** : `https://secure.k2r.ovh/` 6. Dans **Credentials**, copier le **Secret** 7. Mettre Ă  jour `.env` avec le client ID et secret ## 📋 Utilisation ### AccĂšs au Panel Admin 1. Naviguer vers `https://secure.k2r.ovh/admin` 2. Authentification avec Keycloak 3. Vous devez ĂȘtre administrateur (email doit correspondre Ă  `ADMIN_USERNAME`) ### CrĂ©er un Service 1. Cliquer sur **+ New Service** 2. Remplir le formulaire : - **Service Name** : Nom unique du service - **Path** : Chemin public (ex: `/myapp`) - **Target URL** : URL du service interne (ex: `http://localhost:8080`) - **Description** : Description optionnelle - **Require Authentication** : Cocher pour protĂ©ger par OIDC 3. Cliquer **Create Service** ### Exemple de Configuration **Service Public** : - Path: `/public-app` - Target: `http://internal-server:5000` - Auth: DĂ©cochĂ©e - URL d'accĂšs: `https://secure.k2r.ovh/public-app` **Service PrivĂ©** : - Path: `/admin-dashboard` - Target: `http://admin-server:4200` - Auth: CochĂ©e - URL d'accĂšs: `https://secure.k2r.ovh/admin-dashboard` (nĂ©cessite login) ## 🔌 API Routes ### Authentification - `GET /auth/login-page` - Page de connexion - `GET /auth/login` - Initier le login OIDC - `POST /auth/callback` - Callback OIDC - `GET /auth/logout` - DĂ©connexion - `GET /auth/profile` - Profil utilisateur ### Services (Admin seulement) - `POST /api/services` - CrĂ©er un service - `GET /api/services` - Lister tous les services - `GET /api/services/:id` - RĂ©cupĂ©rer un service - `PUT /api/services/:id` - Modifier un service - `DELETE /api/services/:id` - Supprimer un service - `PATCH /api/services/:id/toggle` - Activer/dĂ©sactiver un service - `GET /api/services/:id/logs` - Logs d'accĂšs du service ### Dashboard (Admin seulement) - `GET /dashboard/stats` - Statistiques - `GET /dashboard/logs` - Logs d'audit ## đŸ—‚ïž Structure du Projet ``` openidv2/ ├── src/ │ ├── server.js # Serveur Express principal │ ├── config.js # Configuration │ ├── db.js # Gestion base de donnĂ©es │ ├── middleware/ │ │ ├── oidcMiddleware.js # OIDC et authentification │ │ ├── security.js # SĂ©curitĂ©, rate limiting, etc. │ │ └── proxyMiddleware.js # Reverse proxy │ ├── routes/ │ │ ├── authRoutes.js # Routes d'authentification │ │ ├── adminRoutes.js # Routes d'administration │ │ └── dashboardRoutes.js # Routes dashboard │ ├── services/ │ │ └── serviceManager.js # Logique de gestion des services │ └── controllers/ │ ├── authController.js # ContrĂŽleurs auth │ ├── serviceController.js # ContrĂŽleurs services │ └── adminController.js # ContrĂŽleurs admin ├── public/ │ └── admin.html # Interface admin ├── db/ │ └── services.db # Base de donnĂ©es SQLite ├── scripts/ │ ├── initDb.js # Initialiser la DB │ └── seedDb.js # Charger des donnĂ©es ├── .env.example # Configuration d'exemple ├── package.json └── README.md ``` ## 🔒 SĂ©curitĂ© - **HTTPS obligatoire** en production - **Rate limiting** sur toutes les routes - **CSRF protection** sur les formulaires - **Headers de sĂ©curitĂ©** (Helmet.js) - **Sessions sĂ©curisĂ©es** (httpOnly, sameSite) - **Validation des entrĂ©es** sur tous les chemins - **Logs d'audit** pour toutes les actions - **Isolation des services** : Chaque service a son propre log d'accĂšs ## 📊 Logs et Monitoring ### Logs d'Audit Enregistre : - Actions administrateur (crĂ©ation, modification, suppression de services) - Utilisateur, IP, dĂ©tails ### Logs d'AccĂšs Enregistre pour chaque accĂšs Ă  un service : - Utilisateur, chemin, mĂ©thode HTTP - Code de rĂ©ponse, temps de rĂ©ponse - Adresse IP ### Vue des Logs AccĂ©dez aux logs dans le panel admin sous l'onglet **Audit Logs** ## 🔧 DĂ©pannage ### Le panel admin ne s'affiche pas 1. VĂ©rifier que vous ĂȘtes admin : `ADMIN_USERNAME` doit correspondre Ă  votre email Keycloak 2. VĂ©rifier les logs du serveur ### La redirection OIDC Ă©choue 1. VĂ©rifier la configuration Keycloak 2. VĂ©rifier les URLs dans `.env` 3. S'assurer que HTTPS est utilisĂ© en production ### Les services n'apparaissent pas 1. VĂ©rifier que la DB est initialisĂ©e : `npm run init-db` 2. VĂ©rifier le chemin de la DB dans `.env` ## 📝 Exemples d'Utilisation ### Proxy un service Grafana local ```env Service Name: Grafana Path: /grafana Target URL: http://localhost:3000 Require Auth: Checked ``` Puis accĂ©der via : `https://secure.k2r.ovh/grafana` ### Proxy un service public (sans auth) ```env Service Name: Public Docs Path: /docs Target URL: http://docs-server:8000 Require Auth: Unchecked ``` Accessible Ă  : `https://secure.k2r.ovh/docs` ## 🚀 DĂ©ploiement ### Avec Docker (optionnel) ```dockerfile FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . EXPOSE 3000 CMD ["npm", "start"] ``` ### Avec systemd CrĂ©er `/etc/systemd/system/openidv2.service` : ```ini [Unit] Description=Secure Proxy OIDC After=network.target [Service] Type=simple User=www-data WorkingDirectory=/var/www/openidv2 ExecStart=/usr/bin/node /var/www/openidv2/src/server.js Restart=on-failure Environment="NODE_ENV=production" Environment="PORT=3000" [Install] WantedBy=multi-user.target ``` Puis : ```bash systemctl start openidv2 systemctl enable openidv2 ``` ## 📄 Licence MIT ## đŸ‘€ Support Pour les problĂšmes, consultez les logs : ```bash tail -f /var/log/openidv2.log ``` --- **Made with ❀ for secure internal services**