DéveloppeursConnecteurs

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 :

FournisseurSert à
GoogleConteneurs GTM, propriétés GA4 et flux de données, rapports GA4 et performance Search Console pour @Atlas
MetaComptes publicitaires, pixels, ensembles de données
KlaviyoListes, flows, métriques
NotionRecherche dans la base de connaissances et instructions utilisateur
FigmaExtraction 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 :

OutilCe qu'il lit
listGoogleAnalyticsSourcesVos propriétés GA4, et vos sites Search Console vérifiés quand l'option est activée
readGoogleAnalyticsReportUn rapport GA4 : sessions, utilisateurs, conversions, revenu, ventilés par page, source, canal, appareil, pays ou date
readSearchConsolePerformanceClics, 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.