SSO TrackDéchets — fonctionnement détaillé

Cycle de vie des tokens, refresh automatique, révocation côté TD, distinction cookie de session et token OAuth.

L'authentification web admin de Bordoly repose exclusivement sur le SSO TrackDéchets (le standard de connexion sécurisée des sites publics). Cet article va plus loin que le guide de connexion : il décrit le cycle de vie des tokens, ce qui se passe quand TrackDéchets révoque l'accès, et la différence entre le cookie de session Bordoly et le token OAuth TrackDéchets.

Génération du diagramme…

Flux OAuth 2.0 — de la redirection au stockage chiffré des tokens.

Les deux objets distincts

ObjetStocké oùDuréeSert à
Cookie de session BordolyCookie navigateur (invisible aux scripts du site, protégé contre le vol depuis un autre site)30 jours (TTL configurable)Identifier l'utilisateur sur Bordoly
Token OAuth TrackDéchetsBase Bordoly, chiffré avec un algorithme de niveau militaireCourt (1h type) + refreshAppeler l'API TrackDéchets (BSDs, profil)

Le cookie de session est ce qui maintient votre login Bordoly : il survit aux fermetures de navigateur et glisse à chaque visite (sliding TTL, mise à jour 1×/jour max).

Le token OAuth est utilisé en interne par Bordoly pour parler à TrackDéchets — vous ne le voyez jamais. Il est renouvelé automatiquement 60 secondes avant expiration via le refresh_token.

Cycle de vie complet

1. Première connexion

  1. Vous cliquez Se connecter avec TrackDéchets sur Bordoly
  2. Redirection vers le portail TrackDéchets (page officielle Ministère)
  3. Vous saisissez vos identifiants TD et autorisez Bordoly
  4. TD redirige vers /auth/trackdechets/callback?code=...&state=...
  5. Bordoly échange le code contre un access_token + refresh_token
  6. Bordoly provisionne votre compte : crée/met à jour users, trackdechets_identities, et un tenant_users par SIRET de votre profil TD
  7. Bordoly stocke les tokens chiffrés et crée un cookie de session 30 jours

2. Sessions suivantes

Tant que votre cookie est valide :

  • Vous restez connecté à Bordoly sans repasser par TD
  • Chaque action qui touche TD (création BSD, lecture profil) déclenche getValidAccessToken() qui :
    • Lit le token chiffré en base, le déchiffre
    • Si expiré (ou expire dans < 60 s) : appelle refresh_token et stocke la nouvelle paire
    • Renvoie un access token utilisable

3. Refresh automatique

Le buffer de refresh est 60 secondes (REFRESH_BUFFER_MS). Concrètement :

  • Si TD émet un access_token de 3600 s, Bordoly le rafraîchit à T+3540 s
  • Le refresh est transparent pour l'utilisateur — pas de redirection, pas de toast
  • Si le refresh échoue (TD a révoqué le refresh_token), une 401 remonte et l'UI vous renvoie vers la page de connexion TD

4. Révocation côté TrackDéchets

Plusieurs événements côté TD peuvent invalider votre refresh_token :

Événement TDConséquence sur Bordoly
Changement de mot de passe TDRefresh token révoqué — prochaine action TD échoue avec 401
Retrait d'agrément SIRETtenant_users supprimé à la prochaine connexion (cf. multi-SIRET)
Révocation manuelle dans le portail TDRefresh token révoqué — déconnexion forcée à la prochaine action
Compte TD suppriméToutes les actions TD échouent — accès Bordoly en lecture seule

Quand un refresh échoue, Bordoly garde votre cookie de session (vous restez logué) — mais bloque toute action qui nécessite TD jusqu'à ce que vous vous reconnectiez via TD.

5. Déconnexion explicite

Deux niveaux possibles :

ActionEndpointEffet
Logout BordolyPOST /auth/logoutSupprime le cookie de session — vous restez logué TD
Déconnecter TDPOST /auth/trackdechets/disconnectSupprime votre oauth_tokens row — actions TD bloquées

Le disconnect est idempotent : il renvoie 204 même si vous n'avez plus de tokens. Vous ne perdez pas votre cookie de session par ce biais — mais la prochaine action BSD vous forcera à passer par le SSO TD à nouveau.

Multi-SIRET — un compte TD, N SIRETs Bordoly

Votre profil TD peut couvrir plusieurs SIRETs. Bordoly respecte cette structure :

  • Pour chaque company.siret du profil TD, Bordoly crée un tenants row
  • Et un tenant_users row qui projette les permissions TD (Admin, Member) en RBAC Bordoly
  • Le scope d'accès (allowedSirets) est l'union de tous vos SIRETs autorisés

À chaque nouvelle connexion SSO, Bordoly re-synchronise les SIRETs :

  • Les nouveaux SIRETs TD ajoutés depuis la dernière connexion sont provisionnés
  • Les SIRETs retirés côté TD sont supprimés de vos tenant_users (perte d'accès immédiate au prochain login)

Cas typique : un consultant QHSE a accès à 5 entreprises clientes dans son profil TD. Il se connecte à Bordoly une fois et voit les 5 SIRETs disponibles dans le sélecteur de tenant.

Stockage et sécurité des tokens

Vos tokens TrackDéchets ne sont jamais lisibles dans notre base : ils sont chiffrés au repos avec AES-256-GCM (chiffrement authentifié de niveau militaire). La clé de chiffrement n'est jamais stockée à côté des données : dans notre déploiement actuel elle est injectée au démarrage du serveur via la variable d'environnement ENCRYPTION_KEY, et nous la faisons gérer par notre gestionnaire de secrets en production. Les tokens sont déchiffrés uniquement le temps d'un appel à TrackDéchets, jamais écrits dans les logs, et chaque rafraîchissement écrase l'ancienne paire — il n'en reste donc qu'une seule version active à tout moment. Côté front, votre navigateur n'y a jamais accès : il dialogue avec Bordoly via un cookie de session, et c'est Bordoly qui parle à TrackDéchets en coulisses.

Et la connexion mobile alors ?

L'authentification mobile (chauffeur, technicien) ne passe pas par TrackDéchets :

ActeurAuth mobile
Web adminSSO TrackDéchets uniquement
Chauffeur mobileEmail + PIN 6 chiffres (TTL 30 j) + SecureStore
Technicien mobileEmail + PIN 6 chiffres (TTL 30 j) + SecureStore

Les chauffeurs et techniciens n'ont pas besoin d'un compte TrackDéchets — c'est l'admin producteur ou transporteur qui leur crée un compte mobile dans Bordoly.

Bonnes pratiques

  • Auditez régulièrement les permissions accordées à Bordoly depuis votre profil TrackDéchets (section "Applications connectées")
  • Révoquez Bordoly depuis TD si un compte n'est plus actif — la révocation est effective immédiatement côté Bordoly dès la prochaine action TD
  • Pour vos collègues, créez-leur un compte TrackDéchets dédié : chacun se connectera avec son SSO et héritera de ses propres permissions TD
  • Ne partagez jamais votre cookie de session ou vos tokens TD — ils donnent accès à tout votre périmètre

Et Google SSO ?

Depuis avril 2026, Bordoly propose aussi Se connecter avec Google en parallèle du SSO TrackDéchets. Les deux modes coexistent — Google ne remplace pas TD, il s'y ajoute.

Ce que Google fait (et ne fait pas)

  • Google = identité Bordoly uniquement. Le bouton vous identifie (email + nom) et crée/retrouve votre compte Bordoly. Aucun token TrackDéchets n'est stocké lors d'une connexion Google.
  • Pour accéder aux BSDs, vous devez ensuite connecter votre compte TrackDéchets séparément depuis Paramètres → Intégrations → Connecter mon compte TrackDéchets. Ce 2e flow OAuth crée la oauth_tokens row TD comme pour un SSO TD direct.
  • Tant que TD n'est pas connecté, les actions qui parlent à TD (création BSD, signature, lecture profil) renvoient 403 NEEDS_TRACKDECHETS_CONNECTION avec un lien vers la page de connexion.

Mitigation SPOF — pourquoi c'est utile

Sans cette mécanique, si l'admin qui a connecté TrackDéchets en premier devient injoignable (départ, mot de passe TD changé, agrément retiré), toutes les actions BSD du tenant peuvent se retrouver bloquées en attendant qu'il se reconnecte.

Avec Google + connexion TD individuelle, chaque admin a sa propre connexion à TrackDéchets. Si l'admin de référence part, un autre admin déjà connecté à TrackDéchets peut continuer à émettre et signer les BSDs sans interruption.

Limite actuelle (transparence)

La création d'un BSD utilise le token TD de l'admin qui clique "confirmer" dans Bordoly. Le BSD apparaît donc sous l'identité de cet admin côté TrackDéchets.

Conséquence : si cet admin n'a plus accès TD au moment de la confirmation, un autre admin avec compte TD valide doit confirmer à sa place. Bordoly n'a pas (encore) de pattern de délégation automatique — c'est une étape manuelle. Voir Se connecter avec Google pour le détail du flow.

Et après ?

Vous êtes bloqué ? Écrivez-nous à support@bordoly.fr — engagement Standard : réponse sous 4h ouvrées (lun-ven 9h-18h CET). Entreprise : sous 1h ouvrées (8h-20h CET).

Cet article vous a-t-il aidé ?