feat: v6.7.0 — SSO/SAML + OIDC entreprise (SP SAML signé + OIDC PKCE, auto-provisioning, groupes IdP → rôles workspace, SSO only, onglet Settings « SSO / Enterprise », API /api/v2/sso/*, help, migration 23, docs + OpenAPI 439 chemins) · 802 tests verts
This commit is contained in:
+38
-2
@@ -7,6 +7,10 @@
|
||||
> marketplace de skills (`/api/v2/skills/*`) dans `app/routers/api_v2_agent.py`, logique
|
||||
> partagée `app/services/skill_gallery.py`, OpenAPI régénéré (**427 chemins**), 15 tests dédiés
|
||||
> (`tests/test_v66_agent_api.py`). Voir §2.4.
|
||||
> **v6.7.0 (2026-09-24)** — **SSO / SAML + OIDC entreprise** : parcours navigateur
|
||||
> `/auth/saml/*` + `/auth/oidc/*` (hors scope `/api/v2`), API admin de configuration
|
||||
> `/api/v2/sso/*` (session + admin + CSRF), logique partagée `app/services/sso_provisioning.py`,
|
||||
> OpenAPI régénéré, 38 tests dédiés (`tests/test_v67_sso.py`). Voir §2.5.
|
||||
> Les sections ci-dessous décrivent les conventions cibles et restent la référence de conception.
|
||||
> **Dernière mise à jour** : 2026-09-24
|
||||
> **Portée** : inventaire de l'API existante, conventions cibles, design CRUD par ressource, webhooks, sécurité, checklist d'implémentation.
|
||||
@@ -259,9 +263,41 @@ Mêmes endpoints (session cookie) côté interne : `/api/agent/skills/gallery`,
|
||||
(catalogue `app/services/webhook_outbound.py`, abonnement `agent.*` possible).
|
||||
4. Chaque mutation écrit `api_audit_log` (`agent.create`, `agent.run`, `skill.import`, …).
|
||||
|
||||
---
|
||||
### 2.5 SSO / Enterprise auth (`app/routers/sso.py`, v6.7.0)
|
||||
|
||||
## 3. Conventions cibles pour l'API v2
|
||||
> **Authentification fédérée** : un IdP d'entreprise (SAML 2.0 ou OpenID Connect + PKCE)
|
||||
> ouvre une session FlowDeck ; les comptes sont créés au premier login et les groupes de
|
||||
> l'IdP deviennent des rôles workspace. Design : `docs/V6_SSO_SAML_Enterprise_Auth.md`.
|
||||
|
||||
**Parcours navigateur (session cookie, CSRF exclu — POST IdP cross-site)**
|
||||
|
||||
| Méthode | Route | Description |
|
||||
|---------|-------|-------------|
|
||||
| GET | `/auth/saml/login` | Redirection SP-initiée vers l'IdP (`RelayState` = next sûr) |
|
||||
| POST | `/auth/saml/callback` | Assertion Consumer Service — signature/aud/dest/InResponseTo validés |
|
||||
| GET | `/auth/saml/metadata` | Métadonnées SP XML (EntityID, ACS, SLO, certificat) |
|
||||
| GET | `/auth/saml/logout` | SLO — relaye `SAMLRequest` à l'IdP puis détruit la session (POST accepté pour l'IdP) |
|
||||
| GET | `/auth/oidc/login` | Redirection authorize (`state` + `code_verifier` en DB) |
|
||||
| GET | `/auth/oidc/callback` | Code → token → userinfo ; ID token vérifié (JWKS, aud/iss/nonce/exp) |
|
||||
| GET/POST | `/auth/oidc/logout` | Déconnexion OIDC (relaye à l'IdP si `end_session_endpoint`) |
|
||||
|
||||
**API admin (session + rôle admin + header `X-CSRF-Token`)**
|
||||
|
||||
| Méthode | Route | Description |
|
||||
|---------|-------|-------------|
|
||||
| GET | `/api/v2/sso/providers` | **Public** (page de login) : `{providers[{type,name,icon,login_url}], sso_only, base_url}` |
|
||||
| GET | `/api/v2/sso/config` | Config publique (`{configured, source: db\|env, client_secret_set, provisioned_users}` — **jamais** le secret) |
|
||||
| POST/PUT | `/api/v2/sso/config` | Crée/met à jour (`{configured:false}` = actif) ; champ secret vide = conserver |
|
||||
| DELETE | `/api/v2/sso/config` | Désactive le SSO (les comptes SSO existants restent) |
|
||||
| GET | `/api/v2/sso/workspaces` | Épingles pour le mapping (workspaces + `provisioned_users`) |
|
||||
| POST | `/api/v2/sso/sync` | Re-synchronise les groupes de tous les utilisateurs SSO |
|
||||
| GET | `/api/v2/sso/history` | Journal d'audit des tentatives (`limit` ≤ 200) |
|
||||
|
||||
Règles : secrets chiffrés Fernet (`sso_config`), anti-replay `sso_requests` (TTL 15 min),
|
||||
historique `sso_login_history` (succès/échecs), mode SSO only (login local refusé sauf admins),
|
||||
bootstrap possible par variables `SSO_*` du `.env` (la config admin prime).
|
||||
|
||||
---
|
||||
|
||||
### 3.1 Auth & tokens
|
||||
|
||||
|
||||
Reference in New Issue
Block a user