add SSO/SLO documentation for EasyPortal and EasyCheck integration
This commit is contained in:
parent
5abbd15b45
commit
1d6b9f08d3
|
|
@ -0,0 +1,153 @@
|
|||
# Documentation SSO/SLO - EasyPortal & EasyCheck
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
Cette documentation décrit l'implémentation du **Single Sign-On (SSO)** et du **Single Logout (SLO)** entre deux applications Symfony :
|
||||
- **EasyPortal** : Serveur d'autorisation OAuth2 (Identity Provider)
|
||||
- **EasyCheck** : Application cliente OAuth2
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
┌─────────────────┐ ┌─────────────────┐
|
||||
│ EasyPortal │ │ EasyCheck │
|
||||
│ (OAuth2 Server)│◄──────────────────►│ (OAuth2 Client) │
|
||||
│ │ │ │
|
||||
│ - Authentifie │ │ - Utilise le │
|
||||
│ - Émet tokens │ │ token OAuth2 │
|
||||
│ - Révoque │ │ - Valide token │
|
||||
└─────────────────┘ └─────────────────┘
|
||||
```
|
||||
|
||||
## Single Sign-On (SSO)
|
||||
|
||||
### Principe
|
||||
|
||||
L'utilisateur s'authentifie **une seule fois** sur le portail et accède ensuite à toutes les applications sans re-saisir ses identifiants.
|
||||
|
||||
### Flux d'authentification
|
||||
|
||||
```
|
||||
1. Utilisateur → EasyCheck
|
||||
└─> Pas de session active
|
||||
|
||||
2. EasyCheck → Redirection vers EasyPortal
|
||||
└─> /authorize?client_id=...&redirect_uri=...
|
||||
|
||||
3. Utilisateur → Connexion sur EasyPortal
|
||||
└─> Login/Password ou session existante
|
||||
|
||||
4. EasyPortal → Redirection vers EasyCheck
|
||||
└─> /sso_check?code=AUTHORIZATION_CODE
|
||||
|
||||
5. EasyCheck → Échange du code contre un token
|
||||
└─> POST /token avec authorization_code
|
||||
└─> Reçoit access_token + refresh_token
|
||||
|
||||
6. EasyCheck → Création de session locale
|
||||
└─> Stockage du token en session
|
||||
└─> Utilisateur connecté
|
||||
```
|
||||
|
||||
## Single Logout (SLO)
|
||||
|
||||
### Principe
|
||||
|
||||
Lorsqu'un utilisateur se déconnecte d'une application, il est **automatiquement déconnecté de toutes les applications** SSO.
|
||||
|
||||
### Flux de déconnexion depuis EasyCheck
|
||||
|
||||
```
|
||||
1. Utilisateur → Clic "Déconnexion" sur EasyCheck
|
||||
└─> GET /logout
|
||||
|
||||
2. Symfony → Invalide la session EasyCheck
|
||||
└─> Session détruite, cookies supprimés
|
||||
|
||||
3. LogoutSubscriber → Interception de l'événement
|
||||
└─> Redirection vers EasyPortal
|
||||
|
||||
4. EasyCheck → Redirection
|
||||
└─> GET https://portail.../sso_logout?from_easycheck=1
|
||||
|
||||
5. EasyPortal → Révocation des tokens OAuth2
|
||||
└─> Tous les access_token de l'utilisateur sont révoqués
|
||||
|
||||
6. EasyPortal → Redirection vers /logout
|
||||
└─> GET /logout
|
||||
|
||||
7. Symfony → Invalide la session EasyPortal
|
||||
└─> Session détruite
|
||||
|
||||
8. EasyPortal → Redirection finale
|
||||
└─> GET /login
|
||||
```
|
||||
|
||||
### Flux de déconnexion depuis EasyPortal
|
||||
|
||||
```
|
||||
1. Utilisateur → Clic "Déconnexion" sur EasyPortal
|
||||
└─> GET /sso_logout
|
||||
|
||||
2. EasyPortal → Révocation des tokens OAuth2
|
||||
└─> Tous les access_token de l'utilisateur sont révoqués
|
||||
|
||||
3. EasyPortal → Redirection vers /logout
|
||||
└─> GET /logout
|
||||
|
||||
4. Symfony → Invalide la session EasyPortal
|
||||
└─> Session détruite
|
||||
|
||||
5. LogoutSubscriber → Interception de l'événement
|
||||
└─> Redirection vers EasyCheck
|
||||
|
||||
6. EasyPortal → Redirection
|
||||
└─> GET https://check.../logout
|
||||
|
||||
7. EasyCheck → Invalide la session
|
||||
└─> Session détruite, cookies supprimés
|
||||
|
||||
8. EasyCheck → Redirection vers EasyPortal
|
||||
└─> GET https://portail.../sso_logout?from_easycheck=1
|
||||
|
||||
9. EasyPortal → Détecte from_easycheck=1
|
||||
└─> Redirection directe vers /logout (déjà fait)
|
||||
|
||||
10. EasyPortal → Redirection finale
|
||||
└─> GET /login
|
||||
```
|
||||
|
||||
## Variables d'environnement
|
||||
|
||||
### EasyCheck (.env)
|
||||
|
||||
```bash
|
||||
# URL du serveur SSO (EasyPortal)
|
||||
SSO_URL='https://portail.solutions-easy.moi'
|
||||
|
||||
# Configuration OAuth2
|
||||
OAUTH_CLIENT_ID='easycheck-client-id'
|
||||
OAUTH_CLIENT_SECRET='secret-key'
|
||||
```
|
||||
|
||||
### EasyPortal (.env)
|
||||
|
||||
```bash
|
||||
# URL de l'application cliente (EasyCheck)
|
||||
EASYCHECK_URL='https://check.solutions-easy.moi'
|
||||
|
||||
# Configuration OAuth2 Server
|
||||
OAUTH_PRIVATE_KEY=%kernel.project_dir%/config/jwt/private.key
|
||||
OAUTH_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.key
|
||||
OAUTH_PASSPHRASE='passphrase'
|
||||
OAUTH_ENCRYPTION_KEY='encryption-key'
|
||||
```
|
||||
|
||||
## Points importants
|
||||
|
||||
### Sécurité
|
||||
|
||||
1. **CSRF désactivé sur logout** : Les routes de logout utilisent `enable_csrf: false` car ce sont des liens GET simples
|
||||
2. **Tokens révoqués** : Lors du logout, tous les access_token de l'utilisateur sont révoqués côté portail
|
||||
3. **Sessions invalidées** : Les sessions PHP sont complètement détruites des deux côtés
|
||||
4. **Cookies supprimés** : Les cookies de session sont explicitement supprimés
|
||||
Loading…
Reference in New Issue