Gli ambienti self-hosted sono in beta pubblica sui piani Team ed Enterprise; un Owner li abilita attivando Allow self-hosted environments nella pagina di amministrazione Cloud environments. Questa pagina copre la verifica dell’identità della sessione; consultare la guida rapida per la configurazione e Deploy to production per le ricette della flotta.
CLAUDE_CODE_SESSION_ACCESS_TOKEN. Una sessione presenta il token come qualsiasi credenziale bearer; ad esempio, uno script che Claude esegue può chiamare il vostro servizio con curl -H "Authorization: Bearer $CLAUDE_CODE_SESSION_ACCESS_TOKEN". Anthropic firma il token e pubblica le chiavi di verifica in un endpoint JWKS pubblico. I vostri servizi recuperano quelle chiavi, verificano la firma e leggono i claim per decidere quale accesso concedere.
Il token della sessione
Prima di scrivere il codice di verifica, sapete cosa stabilisce il token e la forma che la vostra libreria JWT vedrà.Cosa prova il token
Un token valido stabilisce alcuni fatti e deliberatamente non altri:- Prova: Anthropic ha emesso il token per una sessione specifica in un ambiente specifico e come è stata creata la sessione: da un utente nella vostra organizzazione, o dall’identità del servizio della vostra organizzazione, che è come iniziano le sessioni del canale Claude Tag
- Non prova: quale processo sull’host del runner lo presenta. Il token si trova in una variabile di ambiente all’interno della sessione, quindi qualsiasi codice che Claude esegue e qualsiasi tool o server MCP che la sessione avvia può leggerlo e presentarlo.
- Verificate il claim
audrispetto all’ID del vostro ambiente, il valoreccpool_...mostrato con il vostro ambiente nella pagina di amministrazione Cloud environments, per rifiutare i token emessi per l’ambiente di qualsiasi altra organizzazione. - Limitate le credenziali che derivate dal token a quello che una singola sessione di codifica dovrebbe essere in grado di fare, non a tutto quello che il creatore della sessione può fare. Consultare Scope derived credentials.
Formato del token
Il valore diCLAUDE_CODE_SESSION_ACCESS_TOKEN ha un prefisso sk-ant-cc- seguito da un JWT standard a tre parti:
sk-ant-si- e sono firmati da un diverso set di chiavi, quindi rifiutate qualsiasi valore che non inizi con sk-ant-cc-.
L’algoritmo di firma è ES256, che è ECDSA sulla curva P-256 con SHA-256. L’intestazione del token porta un kid che identifica quale chiave nel JWKS lo ha firmato.
Verificare il token
La verifica viene eseguita in uno di due posti. I servizi sulla vostra rete verificano il token crittograficamente rispetto alle chiavi pubblicate da Anthropic, e gli script wrapper all’interno della sessione possono invece utilizzare il decoder integrato del binario del runner.Verificare il token dal vostro servizio
Anthropic pubblica le chiavi di verifica in un endpoint pubblico e non autenticato:Cache-Control: public, max-age=300, quindi memorizzare nella cache il set di chiavi e recuperarlo ogni cinque minuti è sicuro.
Verificate ogni token in arrivo rispetto a questi controlli:
1
Controllare il prefisso
Rifiutate il valore se non inizia con
sk-ant-cc-, quindi rimuovete quel prefisso. Il resto è un JWT compatto standard.2
Verificare la firma
Recuperate il JWKS, selezionate la chiave il cui
kid corrisponde all’intestazione del token e verificate la firma ES256. Rifiutate i token il cui header alg non è ES256. Se un token arriva con un kid che non è nel vostro set di chiavi memorizzato nella cache, recuperate il JWKS una volta prima di rifiutarlo: dopo una rotazione, i nuovi token sono firmati con una chiave che il vostro set memorizzato nella cache non ha ancora.3
Verificare l'emittente
Rifiutate il token se
iss non è esattamente ccr.4
Verificare il pubblico rispetto al vostro ambiente
Il claim
aud è un array. Rifiutate il token a meno che non contenga l’ID del vostro ambiente, che ha la forma ccpool_.... L’ID dell’ambiente è mostrato nella finestra di dialogo dei dettagli del vostro ambiente nella pagina di amministrazione Cloud environments e appare come il claim ccr:pool_id in qualsiasi token di sessione dell’ambiente. Questo controllo è quello che limita il token al vostro ambiente e rifiuta i token emessi per altre organizzazioni.5
Verificare il ruolo
Rifiutate il token se
ccr:role non è esattamente session_worker. Altri token emessi per ambienti self-hosted, come i segreti dell’ambiente, i token del runner e gli ordini di lavoro, sono firmati dallo stesso set di chiavi ma portano ruoli diversi.6
Verificare la scadenza
Rifiutate il token se
exp è nel passato. Anthropic emette i token di sessione con una durata di vita di quattro ore per impostazione predefinita e un massimo di otto ore. Il runner aggiorna il token prima della scadenza e invia il nuovo valore alla sessione, quindi i sottoprocessi che Claude avvia dopo un aggiornamento lo ereditano. Una sessione può quindi presentare diversi token validi distinti al vostro servizio nel corso della sua durata.7
Leggere l'identità
L’identità dell’utente che crea è nel claim
act: act.sub è il suo ID utente Anthropic nella forma con prefisso user:<id> e act.email, quando la superficie di creazione ne ha registrato uno, è il suo indirizzo email. Le sessioni che l’identità del servizio della vostra organizzazione crea, incluse le sessioni del canale Claude Tag, portano invece un soggetto agent:, quindi trattate una sessione come creata dall’utente solo quando act.sub porta il prefisso user:, piuttosto che testare se i claim di identità sono assenti. Consultare il riferimento dei claim per la struttura completa e i claim duplicati piatti.jose, che gestisce il recupero JWKS, la memorizzazione nella cache e la selezione di kid, e in Python con PyJWT e il suo client JWKS integrato.
- Node.js (jose)
- Python (PyJWT)
Verificare il token all’interno della sessione
Gli script wrapper vengono eseguiti all’interno della sessione, prima che Claude inizi. Invece di chiamare una libreria JWT, possono eseguire il sottocomandoself-hosted-runner decode-token del binario del runner. Il sottocomando legge il token da un argomento posizionale, da CLAUDE_CODE_SESSION_ACCESS_TOKEN o da stdin piped, in quell’ordine, quindi rimuove il prefisso, verifica la firma rispetto all’endpoint JWKS, controlla la scadenza e stampa i claim come JSON. Il sottocomando esegue solo i controlli di firma e scadenza; non controlla iss, aud o ccr:role. Quando la decisione di autenticazione del vostro wrapper dipende da questi claim, leggete i claim dal JSON stampato e confrontateli esplicitamente.
Questo comando estrae l’identità del creatore, preferendo il soggetto del provider SSO, quindi l’indirizzo email, quindi il soggetto act.sub del creatore, user:<id> o agent:<id>:
CLAUDE_RUNNER_CLAUDE_BIN; utilizzate quel percorso piuttosto che un claude risolto da PATH in modo che la decodifica venga eseguita sullo stesso binario che il runner stesso utilizza.
Utilizzate jq -re piuttosto che jq -r in modo che un claim mancante causi un’uscita diversa da zero. Con solo -r, un claim mancante stampa la stringa letterale null e esce con zero, il che passa silenziosamente un valore errato a valle. Passate --no-verify a decode-token solo per l’ispezione offline dove l’endpoint JWKS è irraggiungibile.
Riferimento dei claim
La tabella seguente elenca i claim del token di sessione rilevanti per la verifica. Leggete l’identità dallo spazio dei nomiccr:* e dalla catena act; i claim piatti account_email, organization_uuid e account_uuid sono duplicati di compatibilità all’indietro che potrebbero essere rimossi. Le sessioni che l’identità del servizio della vostra organizzazione crea, incluse le sessioni del canale Claude Tag, portano un soggetto agent: in act.sub e omettono act.email, ccr:account_id, account_email e account_uuid. I due claim di email sono facoltativi anche per le sessioni create dall’utente: Anthropic li registra al momento della creazione della sessione solo quando le credenziali della richiesta di creazione portano un’email, e una sessione inviata dalla CLI può mancare di entrambi, quindi basate l’identità su act.sub o ccr:account_id piuttosto che su email. I token possono anche portare claim aggiuntivi oltre questa tabella; ignorate i claim che non riconoscete.
La catena act
Il claim act registra il percorso di delega completo dall’identità dell’utente o del servizio che ha creato la sessione fino all’ambiente il cui segreto ha ammesso il runner e l’identità che ha creato quel segreto. Il creatore è l’attore più esterno, quindi act.sub li identifica direttamente.
Scope derived credentials
Il token di sessione identifica l’utente o l’identità del servizio che ha creato la sessione, ma non lo trattate come equivalente a quel creatore che accede direttamente. Il token si trova in una variabile di ambiente all’interno della sessione, quindi qualsiasi codice che Claude esegue e qualsiasi tool o server MCP che la sessione avvia può leggerlo e presentarlo. La verifica è anche offline: un token che verifica rispetto al JWKS rimane valido fino al suoexp, qualunque cosa sia accaduta alla sessione da allora, e Anthropic non pubblica un feed di revoca per i token di sessione. Limitate qualsiasi cosa deriviate dal token di conseguenza.
Quando il vostro servizio scambia il token per credenziali interne, emettete credenziali limitate a quello che una sessione di codifica dovrebbe raggiungere:
- Limitate le capacità: concedete accesso in lettura e scrittura alle risorse di cui la sessione ha bisogno per i compiti di codifica, non alle capacità amministrative che il creatore detiene altrove.
- Limitate la durata: limitate le credenziali derivate al
expdel token, o più breve. - Controllate come la sessione: registrate
ccr:session_idejtiinsieme all’identità del creatore in modo da poter tracciare le azioni di nuovo a una sessione specifica.
Variabili di ambiente correlate
L’identità del creatore appare anche in variabili di ambiente semplici su due superfici che non verificano mai il token:- L’hook
spawn-runner, sull’orchestratore: l’hook viene eseguito prima che esista un runner per una sessione in coda e riceve l’identità del creatore in variabili comeCLAUDE_RUNNER_ACCOUNT_EMAILeCLAUDE_RUNNER_ACCOUNT_ID. L’orchestratore le legge dall’ordine di lavoro, il token firmato monouso che autorizza l’avvio di un runner, senza verificare la firma dell’ordine di lavoro stesso; i claim sono attendibili perché l’ordine di lavoro arriva sulla connessione dell’orchestratore ad Anthropic, che il segreto dell’ambiente autentica. - Script wrapper, all’interno della sessione: i wrapper ricevono
CCR_SESSION_ACCOUNT_EMAIL, l’email del creatore pre-estratta dal token senza verifica della firma. La variabile è adatta per l’etichettatura, come i trailer di commit, non per le decisioni di autenticazione.
CLAUDE_CODE_SESSION_ACCESS_TOKEN quando un servizio a valle ha bisogno di una prova crittografica indipendente piuttosto che fidarsi dell’ambiente del runner.
Cosa c’è dopo
- Self-hosted environments: l’ambiente, il runner e il modello di sessione; la guida rapida e Deploy to production contengono la configurazione e le operazioni
- Customize sessions: script wrapper che consumano il token e l’hook
spawn-runner - Reference: flag CLI, variabili di ambiente e metriche