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.
Flux OAuth 2.0 — de la redirection au stockage chiffré des tokens.
Les deux objets distincts
| Objet | Stocké où | Durée | Sert à |
|---|---|---|---|
| Cookie de session Bordoly | Cookie 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échets | Base Bordoly, chiffré avec un algorithme de niveau militaire | Court (1h type) + refresh | Appeler 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
- Vous cliquez Se connecter avec TrackDéchets sur Bordoly
- Redirection vers le portail TrackDéchets (page officielle Ministère)
- Vous saisissez vos identifiants TD et autorisez Bordoly
- TD redirige vers
/auth/trackdechets/callback?code=...&state=... - Bordoly échange le
codecontre unaccess_token+refresh_token - Bordoly provisionne votre compte : crée/met à jour
users,trackdechets_identities, et untenant_userspar SIRET de votre profil TD - 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_tokenet 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 TD | Conséquence sur Bordoly |
|---|---|
| Changement de mot de passe TD | Refresh token révoqué — prochaine action TD échoue avec 401 |
| Retrait d'agrément SIRET | tenant_users supprimé à la prochaine connexion (cf. multi-SIRET) |
| Révocation manuelle dans le portail TD | Refresh 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 :
| Action | Endpoint | Effet |
|---|---|---|
| Logout Bordoly | POST /auth/logout | Supprime le cookie de session — vous restez logué TD |
| Déconnecter TD | POST /auth/trackdechets/disconnect | Supprime 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.siretdu profil TD, Bordoly crée untenantsrow - Et un
tenant_usersrow 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 :
| Acteur | Auth mobile |
|---|---|
| Web admin | SSO TrackDéchets uniquement |
| Chauffeur mobile | Email + PIN 6 chiffres (TTL 30 j) + SecureStore |
| Technicien mobile | Email + 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_tokensrow 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_CONNECTIONavec 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 ?
- Se connecter avec Google
- Connecter mon compte TrackDéchets
- Hébergement et conformité RGPD
- Engagements opérationnels et incidents
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).