Appearance
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.userBDD 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_tokenavant expiration
Comportement
- au chargement
- au refresh
- toutes les 60 secondes
si AUTH repond que la session n'existe plus :
BDDeffaceapp_access_token- vide la session locale
- redirige vers
/login
Si AUTH est toujours connecte :
BDDdemande silencieusement un nouveauapp_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
endSchema 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 localFichiers cles
Front BDD
front/src/pages/login/LoginPage.vue- redirige vers le portail AUTH avec
application=bddet l environnement configure
- redirige vers le portail AUTH avec
front/src/pages/login/AuthCallbackPage.vue- lit
app_access_token - stocke le jeton local puis charge
/users/me
- lit
front/src/stores/auth-store.js- conserve uniquement
app_access_token
- conserve uniquement
front/src/boot/axios.js- injecte
X-App-Access-Token: <app_access_token>
- injecte
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
- verification HMAC du
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 :
- Presence du header
X-App-Access-Token - Resolution du jeton via cache token (
auth:token:<token>) si disponible - Sinon verification du
app_access_tokenavecAPP_ACCESS_TOKEN_SECRET - Controle de coherence du jeton applicatif :
subpresentapp === bddaud === bddenv === ENVIRONMENT
- Provisioning local via
tool.users/tool.enterprisessi l utilisateur n existe pas encore - Refresh force du profil local sur
GET /users/mepour resynchroniser apres une reinitialisation BDD - Verification de coherence
enterprise_identre jeton applicatif et profil local - Auto-creation du dossier racine actif si le compte n est pas super-admin et si l entreprise n en a plus
- Mise en cache du profil (
auth:user:<userId>, TTL 60 min) - 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,usernameenterprise:{ id, name }account_type:enterprise | personal | nullrole
Il n y a plus de services[], organisations[] ni settings dans le cache utilisateur.
Variables d environnement impliquees
Front BDD
BASE_URLAUTH_APP_URLAPPLICATION=bddENVIRONMENT=<cle d environnement configuree>
Back BDD
AUTH_APP_URLAPP_ACCESS_TOKEN_SECRETENVIRONMENT=<cle d environnement configuree>APPLICATION=bddCONSOLE_ADMIN_API_URLCONSOLE_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
BDDtente maintenant d'abord un refresh silencieux puis revalide contre la sessionAUTH - la deconnexion est donc repercutee au refresh, au focus ou au plus tard sous 60 secondes
Verifier en priorite :
- presence de
APP_ACCESS_TOKEN_SECRETavec la meme valeur dansconsole-admin/backetoutil-bdd/back - valeur
APPLICATION=bdd - valeur
ENVIRONMENTcoherente entreAUTHetBDD
