Introduction

Levelia s'intègre à votre fournisseur d'identité (IdP) via des standards : OIDC et SAML 2.0 pour l'authentification, SCIM 2.0 pour le provisioning. Fournisseurs pris en charge : Okta, Microsoft Entra ID, Google Workspace, Ping Identity, OneLogin, et tout IdP conforme.

URL de base : https://app.levelia.fr. La configuration se fait par organisation (groupe) ; chaque connexion possède un connectionId.

Le déploiement est progressif et réversible : on crée une connexion (état désactivée), on configure l'IdP, on mappe les groupes, on vérifie une connexion réelle, puis on impose le SSO (enforced).

Créer une connexion

Depuis les paramètres SSO (rôle owner / admin / group_admin), créez une connexion OIDC ou SAML. Levelia renvoie les URL à déclarer côté IdP.

POST/api/sso/connections
// Requête (OIDC)
{ "type": "oidc", "issuer": "https://votre-tenant.okta.com",
  "clientId": "…", "clientSecret": "…" }

// Réponse : connexion créée, état "enabled_not_enforced"
{ "id": "<connectionId>", "type": "oidc", "state": "enabled_not_enforced" }

Les états d'une connexion : disabled enabled_not_enforced enforced.

Configurer OIDC

Déclarez Levelia comme application OIDC dans votre IdP, avec l'URL de redirection :

Redirect URI (callback) :
  https://app.levelia.fr/api/auth/sso/<connectionId>/callback

URL de démarrage (login) :
  https://app.levelia.fr/api/auth/sso/<connectionId>/login

Scopes : openid profile email (+ groups)
Claims requis : email, name, groups

Levelia valide les jetons via la découverte OIDC de l'émetteur (JWKS) : signature, audience et anti-rejeu. Le clientSecret est chiffré au repos.

Configurer SAML 2.0

Déclarez Levelia comme Service Provider (SP) SAML dans votre IdP :

ACS URL (Assertion Consumer Service) :
  https://app.levelia.fr/api/auth/sso/<connectionId>/acs

Entity ID (SP) : fourni par Levelia à la création de la connexion
NameID : email (recommandé)
Attributs : email, nom, groupes

Fournissez à Levelia les métadonnées de votre IdP (issuer, URL SSO, certificat de signature). Les assertions sont validées (signature, audience, fenêtre temporelle). La mise en production SAML est validée avec une revue sécurité et un test depuis votre IdP réel.

Provisioning SCIM 2.0

Le provisioning SCIM automatise la création, la mise à jour et le déprovisionnement des utilisateurs et de leurs rôles depuis votre annuaire. Quand SCIM est actif, l'annuaire devient la source d'autorité des affectations.

Base URL SCIM 2.0 :
  https://app.levelia.fr/api/scim/v2

Authentification : Authorization: Bearer <jeton SCIM>
  (généré par organisation, affiché une seule fois, haché au repos, révocable)

Ressources : /Users, /Groups
POST/api/scim/v2/Users

Création/mise à jour d'un utilisateur (idempotent). Un active: false déprovisionne : sessions purgées, accès bloqué, données conservées selon la rétention. Une garde empêche de laisser l'organisation sans administrateur actif.

L'état du provisioning est consultable via GET /api/sso/scim/status.

Mapping des groupes vers entités et rôles

Les groupes de votre annuaire sont mappés vers les entités Levelia (filiales, business units) et les rôles. Un recruteur ne voit que les entités auxquelles son rôle donne accès.

POST/api/sso/mappings
// Exemple de mapping
{ "externalGroup": "rh-groupe-france", "entityId": "<entité France>", "role": "admin" }
{ "externalGroup": "rh-filiale-benelux", "entityId": "<entité Benelux>", "role": "member" }
{ "externalGroup": "audit-conformite", "entityId": "<toutes>", "role": "viewer" }

// Rôles : admin | member | viewer (par entité)
// group_admin : administrateur transverse au groupe

Imposer le SSO

Après avoir vérifié une connexion réelle depuis votre IdP (et contrôlé les rôles et entités visibles), basculez la connexion en mode imposé. L'accès par magic-link est alors désactivé pour l'organisation : l'entrée se fait exclusivement par le SSO.

PATCH /api/sso/connections  →  state: "enforced"

Sécurité

AspectGarantie
Secrets au reposclientSecret OIDC chiffré (AES-256-GCM) ; jeton SCIM haché (scrypt), jamais en clair.
Validation des jetonsSignature, audience et anti-rejeu vérifiés via des bibliothèques éprouvées (jamais de vérification maison).
IsolationChaque identité scopée à son organisation et à ses entités (Row-Level Security PostgreSQL).
DéprovisionnementDésactivation dans l'annuaire → coupure immédiate ; garde « jamais zéro admin ».
RésidenceIdentités, sessions et données hébergées en Union européenne (Gravelines).
TraçabilitéCréation, activation, imposition, révocation et opérations SCIM journalisées (audit).

Vue d'ensemble non technique : voir la page SSO & identités.