Notes préliminaires — ce flux est encore en cours de développement et les
détails ci-dessous peuvent évoluer.
Prérequis
- Liste d’autorisation des rappels. Chaque
callback_urlque vous utilisez doit figurer dans la liste d’autorisation de Devin pour votre intégration. Cette configuration est effectuée par Cognition — envoyez-nous à l’avance les URL exactes. Toute URL qui ne figure pas dans la liste est rejetée. - Outposts activé. Le compte du client doit avoir Outposts activé.
- Autorisation administrateur. L’autorisation d’une connexion nécessite un administrateur Devin disposant à la fois des droits enterprise-settings et des droits de gestion des utilisateurs de service. Le partenaire n’a jamais besoin d’un jeton Devin — l’administrateur l’autorise depuis sa propre session de navigateur.
Vue d’ensemble du flux
1. Générer un vérificateur et un challenge PKCE
- Générez un
code_verifieraléatoire à forte entropie : 43 à 128 caractères issus de l’alphabet non réservé[A-Za-z0-9-._~](p. ex.base64url(random 32 bytes)sans remplissage). - Dérivez le
code_challengeen encodant en base64url, sans remplissage, le SHA-256 du vérificateur (PKCE “S256”) :
code_verifier côté serveur (en l’associant à la valeur state que vous utilisez pour faire le lien avec le callback ultérieur). N’envoyez jamais le code_verifier au navigateur — seul le challenge quitte votre backend.
2. Redirigez l’administrateur vers la page Connect
Si l’administrateur n’est pas connecté, la page Connect conserve ces paramètres et lui demande d’abord de se connecter, puis reprend le processus.
3. L’administrateur confirme
outpost_image si fournie). Lorsque l’administrateur clique sur Connect, Devin vérifie les autorisations, la liste d’autorisation de rappel et la disponibilité du nom de l’outpost, stocke un code chiffré à usage unique (TTL de 10 minutes), puis redirige vers votre application avec le code à usage unique.
Aucun outpost ni utilisateur de service n’existe encore — ils ne sont créés qu’au moment où le code est échangé (étape 5). Un code non échangé expire simplement.
4. Devin redirige le code vers votre URL de callback
callback_url, avec le code ajouté :
5. Échangez le code côté serveur
code_verifier que vous avez stocké à l’étape 1, puis échangez le code auprès de l’endpoint token. Il s’agit d’une requête de token de type OAuth, encodée au format de formulaire :
6. Récupérer les identifiants
Cache-Control: no-store — ne les mettez pas en cache.
7. Exécuter les workers Outpost
access_token et api_base_url de manière sécurisée, puis utilisez le token comme jeton Bearer pour exécuter les workers Outpost sur l’Outpost.
Gestion des erreurs
token suit la RFC 6749 §5.2. Un code inconnu, expiré, déjà utilisé (rejoué) ou non conforme à PKCE renvoie 400 :
invalid_grant comme définitif : supprimez le code_verifier stocké et redémarrez le flux à partir de l’étape 1.
Notes de sécurité
- Le token ne transite jamais par le Browser. Seul le code à usage unique est relayé via la redirection ; le token de l’utilisateur de service n’est renvoyé que lors de l’échange de serveur à serveur.
- PKCE lie le code à votre backend. Le code est inutilisable sans le
code_verifier, conservé uniquement sur votre backend ; intercepter la redirection (ou le code) ne suffit donc pas pour l’échanger. - Les codes sont à usage unique et de courte durée. Leur échange consomme le code de manière atomique ; il expire également au bout de 10 minutes.
- Les URL de rappel figurent sur la liste d’autorisation. Devin ne relaie un code qu’à une
callback_urlque Cognition a préalablement approuvée pour votre intégration. - Vérifiez que le code correspond bien à l’utilisateur demandeur. Assurez-vous que le code renvoyé à votre URL de rappel appartient au même utilisateur que celui qui a initialement demandé la connexion. Cela empêche un attaquant d’amener un utilisateur à lier Devin, à son insu, à un sandbox contrôlé par l’attaquant.
- Gardez un
outpost_namepertinent. L’administrateur peut le remplacer via une dérogation ; le nom que vous transmettez n’est qu’une suggestion.

