2025-12-03 22:12:02 +01:00
2025-12-03 21:36:55 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:36:55 +01:00
2025-12-03 21:36:55 +01:00
2025-12-03 22:12:02 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:38:43 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:38:43 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:38:43 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:38:43 +01:00
2025-12-03 21:26:14 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:38:43 +01:00
2025-12-03 21:38:43 +01:00
2025-12-03 21:38:43 +01:00
2025-12-03 21:34:44 +01:00
2025-12-03 21:51:02 +01:00
2025-12-03 21:38:43 +01:00
2025-12-03 21:51:02 +01:00
2025-12-03 21:38:43 +01:00
2025-12-03 21:51:02 +01:00

🔐 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
cd /Users/alexandre/projet/openidv2
npm install
  1. Configuration

Copier .env.example vers .env et configurer :

cp .env.example .env

Éditer .env avec vos paramètres :

# 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
  1. Initialiser la base de données
npm run init-db
  1. Optionnel : Charger des données de test
npm run seed-db

🚀 Démarrage

Développement

npm run dev

Production

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 ClientsCreate
  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

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)

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)

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 :

[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 :

systemctl start openidv2
systemctl enable openidv2

📄 Licence

MIT

👤 Support

Pour les problèmes, consultez les logs :

tail -f /var/log/openidv2.log

Made with ❤️ for secure internal services

Description
No description provided
Readme 154 KiB
Languages
JavaScript 51.4%
Shell 25.7%
HTML 20.8%
Batchfile 1.6%
Dockerfile 0.5%