[ACC-3.1] Émettrice SSO — cookie draco_session #8

Open
opened 2026-10-20 21:19:35 -04:00 by bruno · 1 comment
Owner

Rôle d'émettrice SSO (C2 = option 2a) : émission et renouvellement du cookie de session partagé draco_session sous .dracodev.net, connexion avec return_to en liste blanche (les quatre domaines confirmés), révocation.

Épopée : Projets/fusion-trois-apps#7. Décisions en vigueur (Bruno, 2026-10-20, bloc C « recommandations OK ») : C1 phasage §12 tel quel · C2 cookie draco_session sous .dracodev.net (2a) · C3 première paire = Flowdeck → TikTak · C5 agent en module d'ObsiGate, API classique (jamais la clé Qwen Token Plan). Registre : Projets/fusion-trois-apps, docs/registre-decisions.md.

**Rôle d'émettrice SSO** (C2 = option 2a) : émission et renouvellement du cookie de session partagé `draco_session` sous `.dracodev.net`, connexion avec `return_to` en liste blanche (les quatre domaines confirmés), révocation. Épopée : Projets/fusion-trois-apps#7. Décisions en vigueur (Bruno, 2026-10-20, bloc C « recommandations OK ») : C1 phasage §12 tel quel · C2 cookie `draco_session` sous `.dracodev.net` (2a) · C3 première paire = Flowdeck → TikTak · C5 agent en module d'ObsiGate, API classique (jamais la clé Qwen Token Plan). Registre : Projets/fusion-trois-apps, `docs/registre-decisions.md`.
bruno added this to the Fusion — accès centralisé milestone 2026-10-20 21:19:35 -04:00
bruno added the roadmap label 2026-10-20 21:19:35 -04:00
bruno added kanban:in_progress and removed roadmap labels 2026-10-20 23:22:53 -04:00
bruno added kanban:review and removed kanban:in_progress labels 2026-10-20 23:32:23 -04:00
Author
Owner

✅ Livré en ObsiGate 2.71.0 — en Révision (Spark, 2026-10-21). Commit cb80b08, fiche roadmap #216 (docs/features/fusion-acc31-sso-draco-session-216.md).

Émission : backend/draco_session.py — JWS HS256, claims minimaux (sub, name, iat, exp 12 h, jti, aucun rôle), posé à chaque émission de jetons natifs (mot de passe ou MFA) avec les attributs du design (Domain=.dracodev.net, HttpOnly, SameSite=Lax, Secure en https). Rotation par DRACO_SESSION_SECRET_PREV.
Renouvellement glissant : middleware ASGI dédié (aucun tamponnage SSE/WS) — réémission si le cookie est absent/invalide/à < 2 h d'expirer, conditionnée à un cookie d'accès natif valide.
Révocation : le logout révoque le jti (data/draco_revoked.json) et efface le cookie ; liste exposée aux autres apps par GET /api/sso/revocations sous clé machine (DRACO_SSO_MACHINE_KEY).
return_to : GET /sso/authorize — liste blanche stricte *.dracodev.net en https (anti open-redirect), retour post-connexion re-validé côté frontend.

Contrôles : 22 tests dédiés verts, suite complète verte (1795), ruff/mypy/bandit propres sur les fichiers touchés, contrôles frontend OK. Inerte tant que DRACO_SESSION_SECRET n'est pas configuré — activation au déploiement, avec le même secret à poser ensuite dans les apps consommatrices (ACC-3.2).

✅ **Livré en ObsiGate 2.71.0 — en Révision** (Spark, 2026-10-21). Commit `cb80b08`, fiche roadmap **#216** (`docs/features/fusion-acc31-sso-draco-session-216.md`). **Émission** : `backend/draco_session.py` — JWS HS256, claims minimaux (`sub`, `name`, `iat`, `exp` 12 h, `jti`, aucun rôle), posé à chaque émission de jetons natifs (mot de passe ou MFA) avec les attributs du design (`Domain=.dracodev.net`, HttpOnly, SameSite=Lax, Secure en https). Rotation par `DRACO_SESSION_SECRET_PREV`. **Renouvellement glissant** : middleware ASGI dédié (aucun tamponnage SSE/WS) — réémission si le cookie est absent/invalide/à < 2 h d'expirer, conditionnée à un cookie d'accès natif valide. **Révocation** : le logout révoque le `jti` (`data/draco_revoked.json`) et efface le cookie ; liste exposée aux autres apps par `GET /api/sso/revocations` sous clé machine (`DRACO_SSO_MACHINE_KEY`). **return_to** : `GET /sso/authorize` — liste blanche stricte `*.dracodev.net` en https (anti open-redirect), retour post-connexion re-validé côté frontend. Contrôles : 22 tests dédiés verts, suite complète verte (1795), ruff/mypy/bandit propres sur les fichiers touchés, contrôles frontend OK. **Inerte tant que `DRACO_SESSION_SECRET` n'est pas configuré** — activation au déploiement, avec le même secret à poser ensuite dans les apps consommatrices (ACC-3.2).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Projets/ObsiGate#8