Voici les Spécifications Techniques (PRD) pour la stack de développement globale de Circuy et son système d'authentification/identification.
L'architecture est découpée en 3 briques indépendantes partageant le même langage ( TypeScript ) pour maximiser la réutilisation des types et des contrats d'API.
┌───────────────────────────────────┐
│ Extension Chrome (WXT / TS) │
└─────────────────┬─────────────────┘
│
┌───────────────────────────────────┐ │ REST / gRPC / WebSockets
│ SDK Client (Vanilla TS / Shepherd)├───────────────┼──────────────────┐
└───────────────────────────────────┘ │ │
▼ ▼
┌───────────────────────────────────┐
│ Backend & API (Node.js / Hono) │
└─────────────────┬─────────────────┘
│
▼
┌───────────────────────────────────┐
│ Base de données (PostgreSQL) │
└───────────────────────────────────┘
Pour offrir une expérience fluide tout en respectant les contraintes strictes des extensions web (Manifest V3) et du RGPD, le système repose sur un Modèle d'Authentification Hybride (SSO / Passkey) basé sur des Tokens JWT courts et Refresh Tokens .
L'authentification par Passkey (WebAuthn) exige un domaine d'origine certifié. Comme l'extension s'exécute sur le protocole chrome-extension://, la meilleure pratique UX/Sécurité consiste à déléguer l'authentification à la plateforme web app.circuy.com via chrome.identity.launchWebAuthFlow.
┌─────────────────┐ 1. Clic "Se connecter" ┌──────────────────┐
│ Extension UI │───────────────────────────────────►│ Browser Identity │
└─────────────────┘ └────────┬─────────┘
▲ │
│ │ 2. Ouvre Pop-up OAuth / WebAuthn
│ ▼
│ ┌──────────────────┐
│ │ app.circuy.com │
│ │ (Passkey / SSO) │
│ └────────┬─────────┘
│ │
│ 4. Redirection avec Token JWT │ 3. Validation Biométrie
└───────────────────────────────────────────────────────┘ ou Provider OAuth
// Structure du stockage local de l'extension
interface AuthStorage {
accessToken: string;
refreshToken: string;
user: {
id: string;
email: string;
organizationId: string;
};
}
Le Background Service Worker de l'extension intercepte chaque requête vers l'API Backend. Si l'AccessToken est expiré (HTTP 401), il utilise le RefreshToken pour obtenir un nouvel AccessToken de manière transparente sans déconnecter l'utilisateur.
Si l'utilisateur est déjà connecté sur le Dashboard Web ( app.circuy.com ) , l'extension peut détecter cette session active sans demander à l'utilisateur de se réauthentifier :
| Composant | Solution Sécurité | Impact RGPD / Souveraineté |
|---|---|---|
| Passkey / WebAuthn | Biométrie traitée localement sur l'appareil (Enclave Sécurisée) | 100% Conforme : Aucune donnée biométrique ne quitte l'appareil. |
| Stockage Tokens | Encapsulé dans chrome.storage.local avec isolation par origine | Évite les fuites de données inter-onglets. |
| API Backend | Chiffrement TLS 1.3 + Entêtes HSTS | Serveurs hébergés en France/UE (Scaleway / OVHcloud). |
| Clés d'API SDK Client | Clés publiques bridées par domaines autorisés (CORS / Domain Whitelisting) | Seuls les domaines validés par le client peuvent exécuter le SDK. |