Fusion ACC-3.2 — validation locale draco_session et pont de session (SSO ObsiGate) #27

Open
opened 2026-10-21 07:46:59 -04:00 by bruno · 1 comment
Owner

Contexte — Écart relevé par Bruno le 2026-10-21 : Kanbante, 4e produit du périmètre Fusion (validé au prototype v7.2), n'a pas reçu la couche identité livrée pendant la nuit sur les trois autres applications (ACC-3, épopée Projets/fusion-trois-apps#7). Cette carte est le rattrapage.

Déjà livré ailleurs (patrons à suivre)

  • Émettrice : ObsiGate 2.71.0 — cookie draco_session (JWS HS256, TTL 12 h, sub = id ObsiGate, révocation par jti exposée via GET /api/sso/revocations sous clé machine, GET /sso/authorize?return_to= en liste blanche *.dracodev.net).
  • Validateurs : TikTak 0.52.0 (app/draco.py), Flowdeck 7.74.0 (app/services/draco.py, pont GET /auth/draco), ObsiGate 2.72.0 (repli dans get_current_user).

Périmètre

  1. Validateur local du cookie draco_session : HS256 vérifié avec DRACO_SESSION_SECRET (et _PREV en rotation), algorithme épinglé, expiration, liste de révocation de l'émettrice en cache 60 s (DRACO_SSO_MACHINE_KEY). Mêmes sémantiques que les validateurs TikTak/Flowdeck (vérification hmac/hashlib, pas de dépendance JWT nouvelle).
  2. Pont GET /auth/draco : cookie valide → création de la session native Kanbante (cookie signé HMAC de la 0.22.0) → redirection vers le board (ou next local validé). Cookie absent/invalide → redirection /login.
  3. Correspondance d'identité : Kanbante est mono-utilisateur (identifiants configurés par l'environnement) → pas de table de liens ; un jeton draco valide désigne l'opérateur configuré (repli mono-utilisateur des autres apps, ici le seul cas).
  4. Bouton « Se connecter avec ObsiGate (SSO) » sur /login, via https://og.dracodev.net/sso/authorize?return_to=https://kanbante.dracodev.net/auth/draco.
  5. Inerte tant que DRACO_SESSION_SECRET n'est pas configuré (comportement actuel inchangé, Basic Auth des scripts intact).

Critères d'acceptation

  • Tests miroirs de test_draco_sso.py (TikTak) : jeton valide → session ; signature falsifiée, jeton expiré, jti révoqué → refusés ; pont sans cookie → /login ; inerte sans secret.
  • Suite Kanbante complète verte, aucune régression.
  • Carte avancée en Révision seulement (Terminé = Bruno).

Activation (Bruno, au déploiement) : poser le même DRACO_SESSION_SECRET et DRACO_SSO_MACHINE_KEY dans l'environnement du conteneur Kanbante, redéployer.

**Contexte** — Écart relevé par Bruno le 2026-10-21 : Kanbante, 4e produit du périmètre Fusion (validé au prototype v7.2), n'a pas reçu la couche identité livrée pendant la nuit sur les trois autres applications (ACC-3, épopée `Projets/fusion-trois-apps#7`). Cette carte est le rattrapage. **Déjà livré ailleurs (patrons à suivre)** - Émettrice : ObsiGate 2.71.0 — cookie `draco_session` (JWS HS256, TTL 12 h, `sub` = id ObsiGate, révocation par `jti` exposée via `GET /api/sso/revocations` sous clé machine, `GET /sso/authorize?return_to=` en liste blanche `*.dracodev.net`). - Validateurs : TikTak 0.52.0 (`app/draco.py`), Flowdeck 7.74.0 (`app/services/draco.py`, pont `GET /auth/draco`), ObsiGate 2.72.0 (repli dans `get_current_user`). **Périmètre** 1. Validateur local du cookie `draco_session` : HS256 vérifié avec `DRACO_SESSION_SECRET` (et `_PREV` en rotation), algorithme épinglé, expiration, liste de révocation de l'émettrice en cache 60 s (`DRACO_SSO_MACHINE_KEY`). Mêmes sémantiques que les validateurs TikTak/Flowdeck (vérification hmac/hashlib, pas de dépendance JWT nouvelle). 2. Pont `GET /auth/draco` : cookie valide → création de la session native Kanbante (cookie signé HMAC de la 0.22.0) → redirection vers le board (ou `next` local validé). Cookie absent/invalide → redirection `/login`. 3. Correspondance d'identité : Kanbante est mono-utilisateur (identifiants configurés par l'environnement) → **pas de table de liens** ; un jeton draco valide désigne l'opérateur configuré (repli mono-utilisateur des autres apps, ici le seul cas). 4. Bouton « Se connecter avec ObsiGate (SSO) » sur `/login`, via `https://og.dracodev.net/sso/authorize?return_to=https://kanbante.dracodev.net/auth/draco`. 5. **Inerte tant que `DRACO_SESSION_SECRET` n'est pas configuré** (comportement actuel inchangé, Basic Auth des scripts intact). **Critères d'acceptation** - Tests miroirs de `test_draco_sso.py` (TikTak) : jeton valide → session ; signature falsifiée, jeton expiré, `jti` révoqué → refusés ; pont sans cookie → `/login` ; inerte sans secret. - Suite Kanbante complète verte, aucune régression. - Carte avancée en **Révision** seulement (Terminé = Bruno). **Activation (Bruno, au déploiement)** : poser le même `DRACO_SESSION_SECRET` et `DRACO_SSO_MACHINE_KEY` dans l'environnement du conteneur Kanbante, redéployer.
bruno added this to the Fusion — accès centralisé milestone 2026-10-21 07:46:59 -04:00
bruno added the roadmap label 2026-10-21 07:46:59 -04:00
bruno added kanban:in_progress and removed roadmap labels 2026-10-21 10:47:31 -04:00
bruno added kanban:review and removed kanban:in_progress labels 2026-10-21 10:55:26 -04:00
Author
Owner

✅ Livré en Kanbante 0.23.0 — en Révision (Spark, 2026-10-21). Commit f087b41.

Validateur local app/draco.py (JWS HS256, secret partagé lu dans les réglages — DRACO_SESSION_SECRET/_PREV, DRACO_SSO_MACHINE_KEY, DRACO_SSO_URL ; révocation de l'émettrice en cache 60 s, mêmes sémantiques que TikTak 0.52.0 et Flowdeck 7.74.0). Pont GET /auth/draco : cookie valide → session native de l'opérateur configuré (mono-utilisateur, aucun mapping) ; sinon retour /login. Bouton « Se connecter avec ObsiGate (SSO) » sur l'écran de connexion. Basic Auth des scripts intact, inerte sans le secret.

Contrôles : 7 tests dédiés verts, suite complète 211/211. Activation (Bruno) : redéployer Kanbante 0.23.0 et poser DRACO_SESSION_SECRET + DRACO_SSO_MACHINE_KEY dans l'environnement du conteneur — les mêmes valeurs que les trois autres applications.

✅ **Livré en Kanbante 0.23.0 — en Révision** (Spark, 2026-10-21). Commit `f087b41`. Validateur local `app/draco.py` (JWS HS256, secret partagé lu dans les réglages — `DRACO_SESSION_SECRET`/`_PREV`, `DRACO_SSO_MACHINE_KEY`, `DRACO_SSO_URL` ; révocation de l'émettrice en cache 60 s, mêmes sémantiques que TikTak 0.52.0 et Flowdeck 7.74.0). Pont `GET /auth/draco` : cookie valide → session native de l'opérateur configuré (mono-utilisateur, aucun mapping) ; sinon retour `/login`. Bouton « Se connecter avec ObsiGate (SSO) » sur l'écran de connexion. Basic Auth des scripts intact, **inerte sans le secret**. Contrôles : 7 tests dédiés verts, suite complète **211/211**. **Activation (Bruno)** : redéployer Kanbante 0.23.0 et poser `DRACO_SESSION_SECRET` + `DRACO_SSO_MACHINE_KEY` dans l'environnement du conteneur — les mêmes valeurs que les trois autres applications.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Projets/kanbante#27