Skip to content

Authentification

Chaine complete (implementation actuelle)

text
1. Front BDD
   LoginPage.vue
   └─ redirection vers AUTH avec :
      - application=bdd
      - environment=<cle d environnement configuree>
      - returnTo=<url callback BDD>

2. AUTH
   └─ authentifie l utilisateur dans le portail AUTH
   └─ appelle POST /auth-app/authorize cote console-admin/back
   └─ verifie que l utilisateur a acces a bdd sur l environnement demande
   └─ emet un app_access_token signe
   └─ redirige vers BDD

3. Front BDD - callback
   AuthCallbackPage.vue
   └─ lit app_access_token
   └─ le stocke localement
   └─ appelle GET /users/me

4. API BDD - AuthGuard NestJS
   └─ verifie X-App-Access-Token
   └─ controle que le jeton applicatif cible bien bdd
   └─ provisionne / met a jour le user local si necessaire
   └─ cree le dossier racine manquant pour les comptes non super-admin
   └─ verifie la coherence enterprise_id entre jeton et profil local
   └─ met en cache token et profil (TTL 60 min)
   └─ injecte request.user

BDD ne depend plus d'une session Supabase locale ni d'un bearer token utilisateur.

Cohérence de session avec AUTH

BDD conserve un app_access_token local, mais ne considere plus cette session comme totalement autonome.

Au demarrage et pendant la vie de l'application, BDD verifie que la session AUTH existe encore via :

  • une iframe technique pointant vers AUTH /session-status
  • un echange postMessage
  • un renouvellement silencieux du app_access_token avant expiration

Comportement

  • au chargement
  • au refresh
  • toutes les 60 secondes

si AUTH repond que la session n'existe plus :

  • BDD efface app_access_token
  • vide la session locale
  • redirige vers /login

Si AUTH est toujours connecte :

  • BDD demande silencieusement un nouveau app_access_token
  • remplace le token local sans recharger la page

Schema

mermaid
sequenceDiagram
  participant BDD as Front BDD
  participant Iframe as iframe AUTH/session-status
  participant AUTH as AUTH

  BDD->>Iframe: postMessage(check)
  Iframe->>AUTH: getFreshSession()
  AUTH-->>Iframe: session active ou absente
  Iframe-->>BDD: postMessage(authenticated=true|false)
  alt authenticated=false
    BDD->>BDD: clearLocalSession()
    BDD->>AUTH: redirect /login
  end

Schema de refresh silencieux

mermaid
sequenceDiagram
  participant BDD as Front BDD
  participant Iframe as iframe AUTH/session-status
  participant AUTH as AUTH
  participant Back as console-admin/back

  BDD->>Iframe: postMessage(refresh, application=bdd, environment)
  Iframe->>AUTH: getFreshSession()
  AUTH->>Back: POST /auth-app/authorize
  Back-->>AUTH: nouveau app_access_token
  Iframe-->>BDD: postMessage(refreshed, appAccessToken)
  BDD->>BDD: remplace le token local

Fichiers cles

Front BDD

  • front/src/pages/login/LoginPage.vue
    • redirige vers le portail AUTH avec application=bdd et l environnement configure
  • front/src/pages/login/AuthCallbackPage.vue
    • lit app_access_token
    • stocke le jeton local puis charge /users/me
  • front/src/stores/auth-store.js
    • conserve uniquement app_access_token
  • front/src/boot/axios.js
    • injecte X-App-Access-Token: <app_access_token>

Back BDD

  • back/src/guards/authGuard.ts
    • valide le jeton applicatif signe
    • provisionne localement le user et son entreprise
  • back/src/guards/appAccessToken.ts
    • verification HMAC du app_access_token
  • back/src/interface/UserCache.ts
    • typage de l objet utilisateur injecte

Detail du AuthGuard

Fichier : back/src/guards/authGuard.ts

Le guard verifie, dans cet ordre :

  1. Presence du header X-App-Access-Token
  2. Resolution du jeton via cache token (auth:token:<token>) si disponible
  3. Sinon verification du app_access_token avec APP_ACCESS_TOKEN_SECRET
  4. Controle de coherence du jeton applicatif :
    • sub present
    • app === bdd
    • aud === bdd
    • env === ENVIRONMENT
  5. Provisioning local via tool.users / tool.enterprises si l utilisateur n existe pas encore
  6. Refresh force du profil local sur GET /users/me pour resynchroniser apres une reinitialisation BDD
  7. Verification de coherence enterprise_id entre jeton applicatif et profil local
  8. Auto-creation du dossier racine actif si le compte n est pas super-admin et si l entreprise n en a plus
  9. Mise en cache du profil (auth:user:<userId>, TTL 60 min)
  10. Injection de l utilisateur dans request.user

Erreurs renvoyees : 401 Unauthorized en cas de jeton applicatif absent/invalide, echec de provisioning local, ou incoherence entre jeton et profil local.

request.user

Resume de l objet injecte par AuthGuard :

  • id, user_id, email, firstname, lastname, username
  • enterprise : { id, name }
  • account_type : enterprise | personal | null
  • role

Il n y a plus de services[], organisations[] ni settings dans le cache utilisateur.

Variables d environnement impliquees

Front BDD

  • BASE_URL
  • AUTH_APP_URL
  • APPLICATION=bdd
  • ENVIRONMENT=<cle d environnement configuree>

Back BDD

  • AUTH_APP_URL
  • APP_ACCESS_TOKEN_SECRET
  • ENVIRONMENT=<cle d environnement configuree>
  • APPLICATION=bdd
  • CONSOLE_ADMIN_API_URL
  • CONSOLE_ADMIN_API_KEY

Back console-admin

  • APP_ACCESS_TOKEN_SECRET

APP_ACCESS_TOKEN_SECRET doit etre identique entre console-admin/back et outil-bdd/back.

Synchronisation cron et console admin

Le protocole AUTH -> BDD est maintenant la source primaire d acces applicatif. L identite locale est provisionnee a la connexion. Il n y a plus de synchro d identite active en runtime.

Le detail du perimetre migre et des manques API est documente dans :

Reinitialisation du mot de passe

Le flux de reinitialisation reste entierement gere par AUTH. Le back BDD n intervient pas.

Point d attention frequent

Si app_access_token manque, est expire, ou ne cible pas bdd, l utilisateur est rejete par BDD.

Si AUTH est deconnecte alors que BDD est deja ouvert :

  • le token local peut encore exister un court instant
  • mais BDD tente maintenant d'abord un refresh silencieux puis revalide contre la session AUTH
  • la deconnexion est donc repercutee au refresh, au focus ou au plus tard sous 60 secondes

Verifier en priorite :

  • presence de APP_ACCESS_TOKEN_SECRET avec la meme valeur dans console-admin/back et outil-bdd/back
  • valeur APPLICATION=bdd
  • valeur ENVIRONMENT coherente entre AUTH et BDD