Contrat SSO Nexus pour applications externes
contrat de compatibilité des bridges SSO Nexus pour applications externes pendant la migration authentik
Objectif
Ce document fixe le contrat de compatibilite pour les applications externes qui utilisent Nexus comme point de connexion SSO pendant la migration authentik.
Decision : les flux SSO externes existants restent supportes pendant NX-AUTH-005. authentik devient l'IdP amont pour les humains, mais Nexus conserve temporairement son bridge applicatif pour les apps deja integrees.
Clarification de vocabulaire
Dans ce document, pilot designe uniquement le nom technique observe cote code Nexus :
- route
/api/auth/pilot/login; - route
/api/auth/pilot/support/bootstrap; - permission
source_app=pilot; - domaine par defaut historique
pilot.auroramind.fr.
Cela ne vaut pas validation du comportement reel de l'application produit nommee Pilot. Le parcours complet de cette application doit etre confirme hors repo avant d'annoncer un test E2E utilisateur.
Flux bridge conserve
Application externe
-> GET /api/auth/pilot/login?return_to=...&state=...
-> Nexus verifie la session locale
-> si absent : redirection vers /fr/login?next=...
-> login Nexus, possiblement via authentik OIDC
-> retour /api/auth/pilot/login
-> Nexus verifie les permissions metier
-> Nexus cree un code court one-time
-> redirection return_to?code=...&state=...
-> application externe echange le code via /api/auth/oauth/exchangeCe bridge ne doit pas exposer les tokens authentik a l'application externe.
Endpoints concernes
| Endpoint | Role | Statut migration |
|---|---|---|
GET /api/auth/pilot/login | Entree SSO du bridge nomme pilot cote Nexus | A conserver pendant migration si utilise |
POST /api/auth/oauth/exchange | Echange code court -> session/JWT Nexus | A conserver pendant migration |
GET /api/auth/pilot/support/bootstrap | Bootstrap support du bridge nomme pilot avec JWT court dedie | A conserver si utilise, secret hors depot |
GET /api/auth/oidc/login | Login humain Nexus via authentik | Nouveau flux amont |
GET /api/auth/oidc/callback | Callback authentik -> session Nexus | Nouveau flux amont |
Invariants de securite
return_todoit rester allowliste par origine et chemin.- Le chemin autorise pour le bridge nomme
pilotreste/support/auth/nexus/callback. - Le code court est one-time, stocke hashe, et expire selon
OAUTH_LOGIN_CODE_TTL_SECONDS. - Un code utilise ou expire doit etre refuse par
/api/auth/oauth/exchange. - Le bridge ne doit pas accepter un
return_toarbitraire. - Les permissions metier Nexus restent obligatoires avant emission du code.
- Aucun mot de passe, token authentik, cookie ou secret bootstrap ne doit etre transmis a l'app externe.
Permissions du bridge nomme pilot
Un utilisateur peut acceder au bridge nomme pilot si :
- son role Nexus est
admin; ou - il possede une permission
source_apppilotousupportaveccan_write=true.
Cette regle est volontairement locale a Nexus tant que ce bridge legacy est utilise.
Incidence authentik
Quand authentik est active, le bridge reste compatible :
Application externe -> Nexus SSO bridge -> login Nexus -> authentik -> session Nexus -> code court NexusAinsi, les applications externes ne changent pas immediatement de contrat. Elles continuent a consommer le code court Nexus.
Cible future
Pour les nouvelles applications humaines :
Application externe -> authentik Authorization Code + PKCE -> access token -> API NexusPour les machines :
Application machine -> authentik client_credentials -> API NexusLe bridge Nexus est donc un mecanisme de compatibilite legacy, pas la cible pour les nouvelles integrations.
Garde-fous pour NX-AUTH-005
NX-AUTH-005 ne doit pas :
- supprimer
/api/auth/pilot/login; - supprimer
/api/auth/oauth/exchange; - supprimer
oauth_login_codes; - casser
get_current_userpour les sessions Nexus locales; - supprimer les utilisateurs Nexus DB necessaires au mapping metier;
- desactiver le login legacy sans verifier que
/fr/login?next=...redirige correctement vers authentik puis revient vers le bridge; - changer l'allowlist
PILOT_SSO_ALLOWED_RETURN_ORIGINSsans inventaire applicatif.
Tests backend Nexus executes
- utilisateur non connecte : redirection vers
/fr/login?next=...; - utilisateur autorise : redirection
return_toaveccodeetstate; - utilisateur sans permission du bridge nomme
pilot: redirectionreturn_toavecerror=forbidden; return_tonon allowliste : refus400;- code court reutilise : refus
401.
Ces tests valident le comportement cote Nexus. Ils ne valident pas le parcours complet de l'application produit Pilot.
E2E utilisateur
Tests E2E utilisateur immediats : aucun pour l'application produit Pilot.
Test E2E ulterieur, conditionnel :
- seulement apres configuration authentik staging;
- seulement si l'application produit Pilot utilise encore le bridge Nexus
/api/auth/pilot/login; - a executer comme test de compatibilite SSO, pas comme test MFA propre a Pilot.
A confirmer hors repo
- L'application produit Pilot utilise-t-elle encore
/api/auth/pilot/login? - Existe-t-il d'autres applications externes qui collectent directement email/mot de passe Nexus ?
- Le domaine
pilot.auroramind.frest-il bien le runtime actif a maintenir ?