Skip to main content
View as Markdown

Présentation de l'authentification

Sovrium propose l'authentification comme une capacité de plateforme de premier ordre, propulsée par Better Auth. Un unique bloc auth dans la configuration de votre application active l'inscription, la connexion, les sessions, le contrôle d'accès basé sur les rôles et la gestion administrateur des utilisateurs — aucun code d'authentification à écrire.

Le bloc auth répond à une seule question : cette application a-t-elle des utilisateurs ? Lorsqu'il est présent, l'authentification est activée ; lorsqu'il est omis, chaque route /api/auth/* renvoie 404 et l'application est entièrement publique.

auth:
  strategies:
    - type: emailAndPassword
  defaultRole: member

Cette configuration de quatre lignes vous offre une inscription et une connexion par e-mail/mot de passe fonctionnelles, des sessions gérées côté serveur, les trois rôles intégrés et les points de terminaison de gestion administrateur des utilisateurs.

Activer l'authentification

L'authentification est activée par la présence de l'objet auth. Il n'existe pas de drapeau auth.enabled: true.

État Résultat
auth omis L'application est publique. Toutes les routes /api/auth/* renvoient 404. Pas d'identité, pas de sessions.
auth présent L'authentification est activée. Les routes d'inscription/connexion sont montées, les sessions sont émises, le RBAC et les fonctions d'administration s'appliquent.

Au minimum, le bloc auth exige un tableau strategies non vide (au moins une stratégie, sans types en double). Tout le reste est optionnel et vient s'ajouter par-dessus.

Le bloc de configuration auth

L'objet auth accepte les propriétés de premier niveau suivantes. Chacune renvoie à sa page dédiée.

Propriété Description
strategies Obligatoire. Tableau de stratégies d'authentification (e-mail/mot de passe, lien magique, OAuth). Au moins une ; sans types en double. Voir Stratégies.
allowSignUp Booléen. Contrôle l'auto-inscription. true (par défaut) permet à quiconque de s'inscrire ; false réserve la création d'utilisateurs aux administrateurs. Voir Stratégies.
roles Tableau de définitions de rôles personnalisés ajoutées par-dessus les rôles intégrés. Voir Rôles & RBAC.
defaultRole Rôle attribué aux nouveaux utilisateurs lors de leur inscription. Par défaut member. Voir Rôles & RBAC.
groups Groupes d'utilisateurs pour une appartenance plusieurs-à-plusieurs et des permissions à l'échelle d'un groupe. Voir Groupes.
twoFactor Authentification à deux facteurs basée sur TOTP. Nécessite la stratégie emailAndPassword. Voir Deux facteurs.
emailTemplates Objet et corps personnalisés pour les e-mails d'authentification (vérification, réinitialisation, lien magique, OTP, invitation, …). Voir Stratégies.
invitationTokenExpiry Durée de vie des jetons d'invitation administrateur à usage unique. Chaîne de durée (72h, 7d) ou millisecondes. Par défaut 72h.
scopeTables Tables référencées par la table de jonction multi-locataire user_access. Pilote le périmètre $currentUser.assignments. Voir Sessions.
landingPath Chemin de montage du résolveur de moteur pour l'atterrissage après connexion par rôle. Voir Atterrissage après connexion.
noAccessPath Chemin de repli lorsqu'aucun defaultLanding de rôle ne correspond à la session. Par défaut /403. Voir Atterrissage après connexion.

Les secrets d'infrastructure (clés de signature, URL de rappel, identifiants OAuth) résident dans les variables d'environnement — pas dans ce schéma. Voir Variables d'environnement.

Rôles par défaut

Chaque application Sovrium dont l'authentification est configurée dispose de trois rôles intégrés, disponibles sans aucune configuration. Ils ne peuvent pas être redéfinis.

Rôle Niveau Accès
admin 80 Accès complet — gérer les utilisateurs, les rôles, les paramètres ; toutes les permissions de table.
member 40 Accès standard aux ressources de l'application (le rôle par défaut des nouveaux utilisateurs).
viewer 10 Accès en lecture seule.

Le niveau numérique établit une hiérarchie (plus élevé = plus privilégié) utilisée par la résolution des permissions. Les rôles personnalisés s'insèrent dans cette hiérarchie avec leur propre level. Voir Rôles & RBAC pour les définitions, la hiérarchie et les rôles administrateur.

Variables d'environnement requises

Deux variables d'environnement sont requises pour l'authentification en production :

Variable Rôle
AUTH_SECRET Clé secrète pour signer les jetons et chiffrer les sessions. Utilisez une chaîne aléatoire forte (32+ caractères).
BASE_URL URL de base de l'application (par ex. https://myapp.com). Utilisée pour les URL de rappel d'authentification et les liens d'e-mail.
AUTH_SECRET=your-strong-random-secret-32-chars-min
BASE_URL=https://myapp.com

Exemple complet

auth:
  # Two ways in: credentials + Google social login
  strategies:
    - type: emailAndPassword
      minPasswordLength: 12
      requireEmailVerification: true
    - type: oauth
      providers: [google, github]

  # Self-registration on, new users start as viewers
  allowSignUp: true
  defaultRole: viewer

  # One extra role beyond the built-ins
  roles:
    - name: editor
      description: Can edit content
      level: 30

  # Group membership for field-level permissions
  groups:
    - name: marketing
    - name: finance

  # TOTP 2FA (requires emailAndPassword above)
  twoFactor:
    issuer: MyApp
    backupCodes: true

Pour aller plus loin

  • Stratégies — e-mail/mot de passe, lien magique, OTP par e-mail, connexion sociale/OAuth, contrôle de l'inscription et modèles d'e-mail.
  • Rôles & RBAC — définitions de rôles, hiérarchie et rôles administrateur.
  • Groupes — appartenance plusieurs-à-plusieurs et permissions basées sur les groupes.
  • Sessions — configuration des sessions, révocation et sessions à périmètre actif.
  • Deux facteurs — configuration TOTP et codes de récupération.
  • Serveur OAuth — Sovrium en tant que serveur d'autorisation OAuth/OIDC.
  • Atterrissage après connexion — atterrissage par rôle et interpolation $currentUser.assignments.
  • Permissions de table — comment les rôles et les groupes contrôlent l'accès par table et par champ.