Contexte
Mon portail a été développé comme solution d'authentification centralisée pour gérer l'accès à un écosystème d'applications en sous-domaines. Avec l'augmentation du volumes de mes projets — traceur GPS, tableaux de bord — le besoin d'un fournisseur d'identité unifié est devenu critique pour éviter des bases utilisateurs fragmentées et des sessions de connexion redondantes.
L'objectif était de construire un hub SSO sécurisé permettant aux utilisateurs de s'authentifier une seule fois et de naviguer entre les services tout en conservant un contrôle granulaire et basé sur les rôles.
Architecture technique et sécurité
Le portail est conçu avec Next.js 15, React 19 et Supabase, en privilégiant une architecture sécurité-first.
Système d'invitation par tokens
Pour maintenir un environnement contrôlé et sur invitation, j'ai développé un flux de rachat de tokens personnalisé :
- Génération : Les super-admins peuvent générer des tokens hachés de 32 caractères avec dates d'expiration et limites d'utilisation
- Rachat : Les utilisateurs rachètent les tokens via une page dédiée, qui accorde automatiquement les permissions par application à l'activation du compte
- Sécurité : La logique des tokens est exécutée via des fonctions PostgreSQL (RPC) pour garantir que la logique d'autorisation sensible reste strictement côté serveur
Infrastructure renforcée
La gestion des identités est assurée par PostgreSQL Row Level Security (RLS). Les utilisateurs n'accèdent qu'à leurs propres profils, tandis que les journaux d'audit administratifs enregistrent toutes les modifications sensibles pour la transparence et la sécurité.
Les applications externes reçoivent des tokens JWT à durée limitée avec des permissions spécifiques, permettant un accès API sécurisé sans exposer les identifiants.
Conformité et internationalisation
Construire un hub central impliquait de traiter la conformité et la localisation comme des priorités, et non comme des ajouts secondaires.
- Internationalisation (i18n) : Support complet anglais et français avec routage par locale et métadonnées SEO optimisées par langue
- Conformité RGPD : Système de consentement cookies granulaire pour les opt-in Google Analytics. Le suivi est strictement désactivé tant que l'utilisateur n'a pas donné son consentement explicite, conservé pendant 365 jours
- Performance : Grâce à Next.js Turbopack et une gestion de session compatible SSR, les vérifications d'authentification n'introduisent pas de latence lors du passage entre sous-domaines
Flux principal
Après une seule connexion — par email ou Google OAuth — l'utilisateur arrive sur un tableau de bord présentant ses projets autorisés.
Lorsqu'un utilisateur tente d'accéder à une application comme PingTrail, le portail vérifie ses permissions en temps réel. S'il est autorisé, il est redirigé vers le sous-domaine avec une session partagée active, sans nouvelle authentification.
Stack technique
- Frontend : Next.js 15 (App Router), React 19, TypeScript, Tailwind CSS, Jotai
- Backend : Supabase (PostgreSQL, Auth, Edge Functions)
- Sécurité : Politiques RLS, tokens JWT, Cloudflare Turnstile pour la protection anti-bots
- Hébergement : Vercel
Bilan
Ce projet marque une transition des sites web par projet vers des systèmes orientés produit et pérennes. En centralisant l'authentification, la sécurité et la conformité dans un seul portail, je peux désormais déployer de nouveaux outils en étant assuré qu'ils sont immédiatement sécurisés et intégrés dans une expérience utilisateur unifiée.



