Connecteurs
Les cinq connecteurs OAuth en plus de Shopify, comment le paramètre state est lié à votre navigateur, et comment les tokens sont renouvelés et stockés.
En plus de Shopify, cinq fournisseurs se connectent en OAuth :
| Fournisseur | Sert à |
|---|---|
| Conteneurs GTM, propriétés GA4 et flux de données, rapports GA4 et performance Search Console pour @Atlas | |
| Meta | Comptes publicitaires, pixels, ensembles de données |
| Klaviyo | Listes, flows, métriques |
| Notion | Recherche dans la base de connaissances et instructions utilisateur |
| Figma | Extraction du kit de marque, en lecture seule sur le contenu des fichiers |
Un sixième fournisseur, Shopify Partners, sert au pool de provisionnement des boutiques, pas à une connexion côté marchand.
YouTube passe par la connexion Google
YouTube n'est pas une app OAuth distincte. C'est une capacité en
lecture seule de la connexion Google : la demander relance le
consentement Google avec deux scopes de plus, youtube.readonly (votre
chaîne et ses vidéos mises en ligne) et yt-analytics.readonly (rapports
de performance par vidéo). Rien ne peut être écrit côté YouTube.
Une connexion Google établie avant votre demande YouTube ne porte pas ces scopes. La vérification d'état indique quel scope manque et vous renvoie vers l'écran de consentement, au lieu d'échouer en pleine synchronisation.
La synchronisation lit au plus 100 vidéos par passage et ne stocke que ce que renvoie le rapport YouTube Analytics : vues, mentions J'aime, commentaires, partages, minutes regardées, durée moyenne de visionnage et abonnés gagnés. Les métriques absentes de ce rapport (impressions, clics, revenus) restent vides. Elles ne sont jamais estimées.
@Atlas lit GA4 et Search Console
Une fois Google connecté, @Atlas peut répondre à partir de vos propres chiffres, avec trois outils en lecture seule :
| Outil | Ce qu'il lit |
|---|---|
listGoogleAnalyticsSources | Vos propriétés GA4, et vos sites Search Console vérifiés quand l'option est activée |
readGoogleAnalyticsReport | Un rapport GA4 : sessions, utilisateurs, conversions, revenu, ventilés par page, source, canal, appareil, pays ou date |
readSearchConsolePerformance | Clics, impressions, CTR et position moyenne, ventilés par requête, page, pays, appareil ou date |
Les rapports GA4 ne demandent aucun consentement de plus. La
connexion Google par défaut accorde déjà analytics.readonly, ce que
demande l'API GA4 Data. @Atlas utilise la propriété GA4 choisie sur le
connecteur, sauf si vous en nommez une autre.
Google Search Console est une option à activer, comme YouTube : le
bouton de connexion Search Console de la page SEO de la boutique relance
le consentement Google avec un scope de plus, webmasters.readonly.
L'option apparaît une fois Search Console activé sur la plateforme. Tant
qu'il n'est pas accordé, @Atlas le dit et vous renvoie vers cette page,
au lieu d'échouer.
Ces lectures (l'adaptateur Google Insights) se font à la demande et ne sont jamais stockées. Un rapport renvoie au plus 250 lignes. Rien n'est écrit côté Google, et un refus de Google (scope manquant, token expiré, quota) est rapporté tel quel, jamais comme un résultat vide.
Le paramètre state est lié à votre navigateur
Le point mérite d'être documenté, parce que la faille n'a rien d'évident.
Les quatre connecteurs d'origine construisaient leur state OAuth de la
même façon : une enveloppe base64 contenant l'identifiant de la boutique
et un chemin de retour. Non signée, liée à rien, et falsifiable par
quiconque pouvait la lire.
Les callbacks vérifiaient bien que la personne qui arrivait avait accès à la boutique. C'est une autre question, et y répondre donnait l'impression que la brèche était fermée. Cela prouve que l'utilisateur qui arrive a accès ; cela ne prouve jamais que le code d'autorisation lui appartient.
L'attaque était un cas d'école : lancer le flux avec votre compte Google sur l'identifiant de boutique de la victime, capturer l'URL de callback, puis amener un membre de cette organisation à l'ouvrir. Sa boutique se retrouve liée à votre compte, et le scan de tracking lit vos conteneurs et vos pixels.
Le state est désormais signé et lié à un nonce présent dans le navigateur qui a lancé le flux : un callback ouvert dans un autre navigateur est refusé.
Tokens
Les tokens d'accès et de rafraîchissement sont stockés chiffrés, avec leur date d'expiration. Les tokens Google et Meta sont renouvelés automatiquement avant expiration. Un échec de renouvellement est inscrit sur la connexion, au lieu de faire échouer en silence la prochaine fonctionnalité qui la lit.
Une révocation côté fournisseur est respectée : la connexion cesse de fonctionner, et se reconnecter demande une action explicite.
Figma est en lecture seule, et pourquoi
L'API REST de Figma ne sait pas écrire le contenu d'un fichier : l'écriture passe par un plugin dans l'éditeur, et l'API Variables en écriture est réservée au plan Enterprise. L'assistant de marque vérifie donc qu'une copie se trouve dans votre compte, lit ses styles de couleur et de texte, puis exporte un JSON de design tokens au format W3C, que vous réimportez avec un plugin de tokens.
Cette limite, nous ne l'avons pas choisie, et prétendre le contraire reviendrait à promettre une synchronisation impossible.
Ce qui a été retiré
La couche des connecteurs ne contient aucun pont MCP. Un registre, un serveur MCP fantôme et un fournisseur Shopify qui gardait un token sur disque y ont vécu ; aucun des trois n'avait d'appelant, et tous ont été supprimés. Si une note plus ancienne les mentionne, elle décrit du code qui n'existe plus.