Note preliminari — questo flusso è nelle prime fasi di sviluppo e i dettagli
riportati di seguito potrebbero cambiare.
Prerequisiti
- Allowlist dei callback. Ogni
callback_urlche utilizzi deve essere presente nell’allowlist di Devin per la tua integrazione. La configurazione viene effettuata da Cognition: inviaci in anticipo gli URL esatti. Qualsiasi URL non presente nell’elenco verrà rifiutato. - Outposts abilitato. L’account del cliente deve avere Outposts abilitato.
- Autorizzazione admin. Per autorizzare una connessione è necessario un admin di Devin con diritti sia su
enterprise-settingssia sulla gestione deiutenti di servizio. Il partner non ha mai bisogno di un token Devin: l’admin autorizza la connessione nella propria sessione del browser.
Panoramica del flusso
1. Genera un verifier e una challenge PKCE
- Genera un
code_verifiercasuale ad alta entropia: 43–128 caratteri dall’alfabeto non riservato[A-Za-z0-9-._~](ad es.base64url(random 32 bytes)con il padding rimosso). - Deriva il
code_challengecome base64url senza padding dello SHA-256 del verifier (PKCE “S256”):
code_verifier lato server (associandolo allo stato che usi per correlare l’eventuale callback). Non inviare mai code_verifier al browser: dal tuo backend deve uscire solo il challenge.
2. Reindirizza l’admin alla pagina Connect
Se l’admin non ha effettuato l’accesso, la pagina Connect salva questi parametri e gli chiede prima di accedere, quindi riprende il processo.
3. L’admin conferma
outpost_image, se fornito). Quando l’admin fa clic su Connect, Devin verifica le autorizzazioni, l’allowlist dei callback e che il nome dell’outpost non sia già in uso, memorizza un codice crittografato monouso (TTL di 10 minuti) e reindirizza alla tua app con il codice una tantum.
Non esistono ancora né un outpost né un utente di servizio: vengono creati solo quando il codice viene riscattato (passaggio 5). Un codice non riscattato scade semplicemente.
4. Devin reindirizza il codice al callback
callback_url con il codice aggiunto:
5. Scambia il codice tra server
code_verifier che hai archiviato nel passaggio 1 e scambia il codice presso l’endpoint del token. Si tratta di una richiesta di token in stile OAuth con codifica form:
6. Ricevi le credenziali
Cache-Control: no-store — non metterle in cache.
7. Eseguire gli outpost worker
access_token e api_base_url in modo sicuro e usare il token come credenziale bearer per eseguire gli outpost worker sull’outpost.
Gestione degli errori
400:
invalid_grant come definitivo: elimina il code_verifier memorizzato e riavvia il flusso dal passaggio 1.
Note sulla sicurezza
- Il token non passa mai dal browser. Solo il codice monouso viene inoltrato tramite redirect; il token dell’utente di servizio viene restituito esclusivamente dallo scambio da server a server.
- PKCE vincola il codice a te. Il codice è inutilizzabile senza il
code_verifier, conservato solo nel tuo backend, quindi intercettare il redirect (o il codice) non basta per utilizzarlo. - I codici sono monouso e di breve durata. Il riscatto consuma il codice in modo atomico; inoltre, scade dopo 10 minuti.
- Le callback URL sono nell’allowlist. Devin inoltra un codice a un
callback_urlsolo se Cognition lo ha pre-approvato per la tua integrazione. - Verifica che il codice sia per l’utente che ha effettuato la richiesta. Conferma che il codice restituito alla tua callback appartenga allo stesso utente che ha richiesto originariamente la connessione. Questo impedisce a un attaccante di indurre un utente, a sua insaputa, a vincolare Devin a un sandbox controllato dall’attaccante.
- Mantieni
outpost_namesensato. L’admin può applicare un override; il nome che passi è solo un suggerimento.

