Connectors
Microsoft 365
Microsoft 365 (Outlook + OneDrive)
Connecteur OAuth (Authorization Code), par utilisateur : chaque utilisateur connecte SON compte Microsoft. Les jetons sont chiffrés au repos. Reproduit le connecteur graph de Stackeo (mail Outlook + OneDrive).
1 — Créer l'app registration Azure
Sur le portail Azure (gratuit, un compte Microsoft suffit) : portal.azure.com.
- Va sur portal.azure.com et connecte-toi (idéalement avec le compte dont tu testeras l'adresse M365).
- Barre de recherche en haut → « App registrations » (Inscriptions d'applications).
- Clique « + New registration » (Nouvelle inscription).
- Name : « WeeAgent M365 ». Supported account types : « Accounts in any organizational directory and personal Microsoft accounts ».
- Redirect URI : plateforme « Web » + colle l'URL de callback (voir encadré ci-dessous). Puis « Register ».
- Sur Overview : copie l'« Application (client) ID » → c'est MS_CLIENT_ID.
- Certificates & secrets → « + New client secret » → copie tout de suite la colonne « Value » (pas « Secret ID ») → c'est MS_CLIENT_SECRET (elle ne se réaffiche jamais).
- API permissions → + Add a permission → Microsoft Graph → Delegated permissions → coche : offline_access, User.Read, Mail.Read, Mail.Send, Files.Read → Add permissions.
<SUPABASE_URL>/functions/v1/ms-oauth-callback. Trouve <SUPABASE_URL> dans Supabase → Project Settings → API → Project URL (ex. https://abcd1234.supabase.co). Il doit correspondre EXACTEMENT (sinon Microsoft renvoie « redirect_uri mismatch »).2 — Renseigner les secrets (Supabase)
1supabase secrets set \
2 MS_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
3 MS_CLIENT_SECRET=la_valeur_du_secret \
4 OAUTH_ENCRYPTION_KEY=une_longue_phrase_aleatoire \
5 APP_URL=https://ton-app.com
6# MS_TENANT est optionnel (défaut : common)3 — Appliquer la migration & déployer
1supabase db push # applique 0007_oauth_connections
2supabase functions deploy ms-oauth-start ms-graph
3supabase functions deploy ms-oauth-callback --no-verify-jwtms-oauth-callback DOIT être déployée avec --no-verify-jwt : c'est une redirection navigateur depuis Microsoft, sans JWT Supabase. La sécurité vient du state signé (HMAC).4 — Connecter & utiliser
Sur la page Connecteurs, le bouton « Connecter » (carte Microsoft 365) lance le consentement Microsoft, puis renvoie sur l'app. Le statut passe à « ● Connecté ». Le proxy ms-graph (auth JWT, refresh automatique) expose ensuite des actions :
1// POST <SUPABASE_URL>/functions/v1/ms-graph
2{ "action": "mail_list", "limit": 10 }
3{ "action": "mail_send", "to": "x@y.com", "subject": "…", "body": "…" }
4{ "action": "onedrive_list", "path": "Documents" }
5{ "action": "status" }Actions Graph
status— état de connexion (sans jeton).me— profil (nom, email).mail_list— derniers mails Outlook (objet, expéditeur, date, aperçu).mail_send— envoi d'un mail (to, subject, body).onedrive_list— fichiers/dossiers OneDrive (racine oupath).
Depuis WeeAgent
Active l'option microsoft sur le provider pour donner ces outils (lecture seule) a l'agent :
1<WeeAgentProvider bridge={bridge} microsoft>
2 <WeeAgentDock title="Copilot" />
3</WeeAgentProvider>L'agent peut alors repondre a : « liste mes derniers mails Outlook », « qu'y a-t-il dans mon OneDrive », « mon profil Microsoft ». Outils : mail_list, onedrive_list, me.
Sécurité (comment ça marche)
- Jetons chiffrés au repos (AES-GCM via
OAUTH_ENCRYPTION_KEY,_shared/crypto.ts). - Table
oauth_connections: RLS activée sans policy → accès uniquement via des RPCSECURITY DEFINER(service_role). - Le
stateOAuth est signé HMAC (porte leuser_id, expire en 10 min) → anti-CSRF, sans table de states. - Le token est rafraîchi automatiquement par
ms-graphquand il expire.
Dépannage
- « redirect_uri mismatch » → l'URI Azure ne correspond pas exactement à
<SUPABASE_URL>/functions/v1/ms-oauth-callback. not_connected(409) → l'utilisateur n'a pas encore cliqué « Connecter ».- Erreur de token → vérifie
MS_CLIENT_SECRET(la Value, pas le Secret ID) etOAUTH_ENCRYPTION_KEY.