L'équipe expose Grafana en trois clics « temporairement » pour un audit. Pas de SSO natif, mot de passe admin par défaut changé « plus tard ». Deux semaines après, le port 443 pointe toujours vers Internet avec basic auth maison facile à brute-forcer.
Un OAuth proxy (oauth2-proxy, OAuth2 Proxy, Vouch, etc.) place l'authentification là où l'application legacy ne sait pas le faire — devant, pas dedans.
Architecture type
Client → TLS terminator (nginx/Traefik) → oauth2-proxy → app upstream. Flux : redirect IdP (Google Workspace, Azure AD, Keycloak) → callback → cookie chiffré → accès app.
L'app reste en HTTP interne ; seule la edge est exposée.
Configuration sécurisée
Cookie : Secure, HttpOnly, SameSite=Lax minimum. --cookie-secret rotatable. Restreindre --email-domain ou groupes OIDC.
Ne jamais exposer l'upstream direct sans auth parallèle — bypass immédiat.
Headers et confiance
Passez X-Forwarded-User/Email/Groups. L'app ne doit pas croire ces headers depuis le monde ; firewall ou network policy : seulement depuis le proxy.
Pour RBAC app (admin vs viewer), mappez claims OIDC → headers ou utilisez un second proxy path par rôle.
Cas particuliers
Webhooks entrant : route bypass auth avec secret HMAC séparé.
API machine : pas oauth2-proxy — mTLS ou token API dédié.
Health checks : /health sans auth pour load balancer, sans données sensibles.
Exploitation
Logs centralisés des auth failures. Session expiry alignée sur politique entreprise. Documentez procédure offboarding : révoquer sessions IdP + rotate cookie secret si départ sensible.
Checklist déploiement
- Upstream app inaccessible directement depuis Internet
- Cookie Secure HttpOnly SameSite configuré
--email-domainou groupes OIDC restrictifs- Routes bypass listées (health, webhook HMAC)
- Headers X-Forwarded-* trustés app-side depuis proxy seul
- WebSocket testé bout en bout
- Session expiry alignée politique RH
- Logs auth failure centralisés
- Procédure offboarding documentée
- Renouvellement cert testé sans logout massif
Validez avec pentest interne « bypass proxy » — si réussi, corrigez réseau avant d'annoncer SSO.
Intégration équipe et lifecycle
Onboarding : nouvel ingénieur reçoit accès IdP + doc ProxyJump/oauth path — pas URL upstream directe. Offboarding : révoquer IdP et invalider cookies session (rotate cookie-secret si départ sensible).
Multi-environnement : staging oauth2-proxy vers IdP staging app registration — ne partagez pas client_id prod/staging.
Observabilité : métrique 401/403 oauth-proxy vs 502 upstream — distinguer auth fail vs app down.
Limites : oauth2-proxy ne remplace pas autorisation fine (RBAC app) — il authentifie, l'app autorise encore.
Multi-outils internes (Grafana + Prometheus + Kibana) : un oauth2-proxy par upstream ou forward auth central Traefik — les deux marchent, ne mélangez pas cookies secrets.
Session length vs idle timeout : alignez sur sensibilité données (logs prod vs wiki RH).
Break-glass local account désactivé par défaut, activé via break-glass procedure only — pas de backdoor oubliée.
Tenez runbook daté, métriques avant/après, revue post-incident — la discipline cumulative évite la panique du vendredi soir.
Tenez runbook daté, métriques avant/après, revue post-incident — la discipline cumulative évite la panique du vendredi soir.
Tenez runbook daté, métriques avant/après, revue post-incident — la discipline cumulative évite la panique du vendredi soir.
Tenez runbook daté, métriques avant/après, revue post-incident — la discipline cumulative évite la panique du vendredi soir.
Tenez runbook daté, métriques avant/après, revue post-incident — la discipline cumulative évite la panique du vendredi soir.
Tenez runbook daté, métriques avant/après, revue post-incident — la discipline cumulative évite la panique du vendredi soir.
SSO réseau
Upstream joignable par IP = contournement SSO. Login <30s documenté.
Tenez runbook daté, métriques avant/après, revue post-incident — la discipline cumulative évite la panique du vendredi soir.
Décider et avancer sans angle mort
- Couper l'accès direct Internet à l'app upstream — seul le proxy doit être joignable publiquement.
- Configurer cookies Secure HttpOnly SameSite — routes bypass listées (health, webhooks HMAC signés).
- Restreindre domaines ou groupes OIDC — session expiry alignée politique RH, logs auth centralisés.
- Tester WebSocket bout en bout — headers X-Forwarded-* trustés depuis le proxy seul.
- Pentest bypass proxy — procédure offboarding documentée, renouvellement cert sans logout massif.
Comparez hébergements adaptés aux stacks SSO via l'annuaire et nos guides.
Questions fréquentes
oauth2-proxy vs reverse proxy classique ?
oauth2-proxy gère le flux OAuth/OIDC et pose un cookie de session ; nginx seul ne valide pas l'identité IdP sans module additionnel.
L'app voit-elle l'utilisateur réel ?
Via headers X-Forwarded-User/Email/Groups si configurés — l'app doit les faire confiance seulement depuis le proxy (network ACL).
Comment gérer les WebSockets ?
Activez upstream support WebSocket sur nginx/traefik ; oauth2-proxy doit autoriser les routes upgrade avec même cookie session.
Risque si mal configuré ?
Bypass via IP whitelist trop large, cookie sans Secure/HttpOnly, ou app qui accepte headers usurpés depuis Internet.
Avant d'annoncer « SSO activé », tentez d'atteindre l'upstream sans passer par le proxy — si ça marche, ce n'est pas fini.
