Selbstgehostete Umgebungen befinden sich in der öffentlichen Beta für Team- und Enterprise-Pläne; ein Owner aktiviert sie, indem er Selbstgehostete Umgebungen zulassen auf der Cloud-Umgebungen-Administratorseite einschaltet. Diese Seite behandelt die Überprüfung der Sitzungsidentität; siehe den Schnellstart für die Einrichtung und In Produktion bereitstellen für die Fleet-Rezepte.
CLAUDE_CODE_SESSION_ACCESS_TOKEN. Eine Sitzung präsentiert das Token wie jede Bearer-Anmeldeinformation; beispielsweise kann ein Skript, das Claude ausführt, Ihren Dienst mit curl -H "Authorization: Bearer $CLAUDE_CODE_SESSION_ACCESS_TOKEN" aufrufen. Anthropic signiert das Token und veröffentlicht die Überprüfungsschlüssel an einem öffentlichen JWKS-Endpunkt. Ihre Dienste rufen diese Schlüssel ab, überprüfen die Signatur und lesen die Claims, um zu entscheiden, welchen Zugriff sie gewähren.
Das Sitzungstoken
Bevor Sie Überprüfungscode schreiben, wissen Sie, was das Token etabliert und welche Form Ihre JWT-Bibliothek sehen wird.Was das Token beweist
Ein gültiges Token etabliert einige Fakten und bewusst nicht andere:- Beweist: Anthropic hat das Token für eine bestimmte Sitzung in einer bestimmten Umgebung ausgestellt und wie die Sitzung erstellt wurde: von einem Benutzer in Ihrer Organisation oder von der Dienstidentität Ihrer Organisation, was der Weg ist, wie Claude Tag-Kanalsitzungen starten
- Beweist nicht: welcher Prozess auf dem Runner-Host es präsentiert. Das Token sitzt in einer Umgebungsvariablen innerhalb der Sitzung, daher kann jeder Code, den Claude ausführt, und jedes Tool oder MCP-Server, das die Sitzung startet, es lesen und präsentieren.
- Überprüfen Sie den
aud-Claim gegen Ihre Umgebungs-ID, denccpool_...-Wert, der mit Ihrer Umgebung auf der Cloud-Umgebungen-Administratorseite angezeigt wird, um Tokens abzulehnen, die für die Umgebung einer anderen Organisation ausgestellt wurden. - Beschränken Sie Anmeldeinformationen, die Sie vom Token ableiten, auf das, was eine einzelne Codierungssitzung tun sollte, nicht auf alles, was der Ersteller der Sitzung tun kann. Siehe Abgeleitete Anmeldeinformationen beschränken.
Token-Format
Der Wert vonCLAUDE_CODE_SESSION_ACCESS_TOKEN hat ein sk-ant-cc--Präfix gefolgt von einem Standard-JWT mit drei Teilen:
sk-ant-si--Präfix und werden von einem anderen Schlüsselsatz signiert, daher lehnen Sie jeden Wert ab, der nicht mit sk-ant-cc- beginnt.
Der Signaturalgorithmus ist ES256, das ist ECDSA auf der P-256-Kurve mit SHA-256. Der Token-Header trägt einen kid, der identifiziert, welcher Schlüssel im JWKS ihn signiert hat.
Token verifizieren
Die Verifizierung läuft an einem von zwei Orten ab. Dienste in Ihrem Netzwerk verifizieren den Token kryptografisch gegen die veröffentlichten Schlüssel von Anthropic, und Wrapper-Skripte innerhalb der Sitzung können stattdessen den integrierten Decoder des Runner-Binärs verwenden.Token von Ihrem Dienst verifizieren
Anthropic veröffentlicht die Verifizierungsschlüssel an einem öffentlichen, nicht authentifizierten Endpunkt:Cache-Control: public, max-age=300, daher ist es sicher, die Schlüsselmenge zu cachen und alle fünf Minuten erneut abzurufen.
Verifizieren Sie jeden eingehenden Token gegen diese Prüfungen:
1
Präfix prüfen
Lehnen Sie den Wert ab, wenn er nicht mit
sk-ant-cc- beginnt, und entfernen Sie dann dieses Präfix. Der Rest ist ein Standard-Compact-JWT.2
Signatur verifizieren
Rufen Sie die JWKS ab, wählen Sie den Schlüssel aus, dessen
kid dem Token-Header entspricht, und verifizieren Sie die ES256-Signatur. Lehnen Sie Tokens ab, deren alg-Header nicht ES256 ist. Wenn ein Token mit einer kid ankommt, die sich nicht in Ihrem gecachten Schlüsselsatz befindet, rufen Sie die JWKS einmal ab, bevor Sie ihn ablehnen: Nach einer Rotation werden neue Tokens mit einem Schlüssel signiert, den Ihr gecachter Satz noch nicht hat.3
Aussteller verifizieren
Lehnen Sie den Token ab, wenn
iss nicht genau ccr ist.4
Zielgruppe gegen Ihre Umgebung verifizieren
Der
aud-Anspruch ist ein Array. Lehnen Sie den Token ab, es sei denn, er enthält Ihre Umgebungs-ID, die die Form ccpool_... hat. Die Umgebungs-ID wird im Detaildialog Ihrer Umgebung auf der Cloud-Umgebungen-Administratorseite angezeigt und erscheint als ccr:pool_id-Anspruch in jedem der Sitzungs-Tokens der Umgebung. Diese Prüfung ist das, was den Token auf Ihre Umgebung beschränkt und Tokens ablehnt, die für andere Organisationen ausgestellt wurden.5
Rolle verifizieren
Lehnen Sie den Token ab, wenn
ccr:role nicht genau session_worker ist. Andere Tokens, die für selbstgehostete Umgebungen ausgestellt werden, wie Umgebungsgeheimnisse, Runner-Tokens und Arbeitsaufträge, werden vom gleichen Schlüsselsatz signiert, tragen aber unterschiedliche Rollen.6
Ablauf verifizieren
Lehnen Sie den Token ab, wenn
exp in der Vergangenheit liegt. Anthropic stellt Sitzungs-Tokens standardmäßig mit einer Lebensdauer von vier Stunden und maximal acht Stunden aus. Der Runner aktualisiert den Token vor Ablauf und überträgt den neuen Wert an die Sitzung, daher erben Unterprozesse, die Claude nach einer Aktualisierung startet, ihn. Eine Sitzung kann daher über ihre Lebensdauer hinweg mehrere unterschiedliche gültige Tokens für Ihren Dienst präsentieren.7
Identität lesen
Die Identität des erstellenden Benutzers befindet sich im
act-Anspruch: act.sub ist seine Anthropic-Benutzer-ID in der präfixierten Form user:<id>, und act.email, wenn die erstellende Oberfläche eine aufgezeichnet hat, ist seine E-Mail-Adresse. Sitzungen, die die Service-Identität Ihrer Organisation erstellt, einschließlich Claude-Tag-Kanalsitzungen, tragen stattdessen einen agent:-Betreff, daher behandeln Sie eine Sitzung nur als vom Benutzer erstellt, wenn act.sub das user:-Präfix trägt, anstatt zu testen, ob Identitätsansprüche fehlen. Siehe die Anspruchsreferenz für die vollständige Struktur und die flachen doppelten Ansprüche.jose, das JWKS-Abruf, Caching und kid-Auswahl handhabt, und in Python mit PyJWT und seinem integrierten JWKS-Client.
- Node.js (jose)
- Python (PyJWT)
Token innerhalb der Sitzung verifizieren
Wrapper-Skripte laufen innerhalb der Sitzung, bevor Claude startet. Anstatt eine JWT-Bibliothek aufzurufen, können sie den Unterbefehlself-hosted-runner decode-token des Runner-Binärs ausführen. Der Unterbefehl liest den Token aus einem Positionsargument, aus CLAUDE_CODE_SESSION_ACCESS_TOKEN oder aus gepiptem stdin, in dieser Reihenfolge, entfernt dann das Präfix, verifiziert die Signatur gegen den JWKS-Endpunkt, prüft den Ablauf und gibt die Ansprüche als JSON aus. Der Unterbefehl führt nur die Signatur- und Ablaufprüfungen durch; er prüft nicht iss, aud oder ccr:role. Wenn die Authentifizierungsentscheidung Ihres Wrappers von diesen Ansprüchen abhängt, lesen Sie sie aus dem gedruckten JSON und vergleichen Sie sie explizit.
Dieser Befehl extrahiert die Ersteller-Identität und bevorzugt dabei den Betreff des SSO-Anbieters, dann die E-Mail-Adresse, dann den act.sub-Betreff des Erstellers, user:<id> oder agent:<id>:
CLAUDE_RUNNER_CLAUDE_BIN; verwenden Sie diesen Pfad anstelle eines PATH-aufgelösten claude, damit die Dekodierung auf dem gleichen Binär läuft, das der Runner selbst verwendet.
Verwenden Sie jq -re anstelle von jq -r, damit ein fehlender Anspruch einen Exit-Code ungleich Null verursacht. Mit nur -r gibt ein fehlender Anspruch die Literalzeichenkette null aus und beendet mit Null, was einen schlechten Wert stillschweigend nachgelagert übergibt. Übergeben Sie --no-verify an decode-token nur zur Offline-Inspektion, wenn der JWKS-Endpunkt nicht erreichbar ist.
Claims-Referenz
Die folgende Tabelle listet die Sitzungs-Token-Claims auf, die für die Überprüfung relevant sind. Lesen Sie die Identität aus demccr:*-Namespace und der act-Kette; die flachen account_email-, organization_uuid- und account_uuid-Claims sind Rückwärtskompatibilitätsduplikate, die möglicherweise entfernt werden. Sitzungen, die die Dienstidentität Ihrer Organisation erstellt, einschließlich Claude Tag-Kanalsitzungen, tragen einen agent:-Betreff in act.sub und lassen act.email, ccr:account_id, account_email und account_uuid weg. Die beiden E-Mail-Claims sind auch für vom Benutzer erstellte Sitzungen optional: Anthropic zeichnet sie bei der Sitzungserstellung nur auf, wenn die Anmeldeinformationen der erstellenden Anfrage eine E-Mail tragen, und eine Sitzung, die von der CLI versendet wird, kann beide fehlen, daher basieren Sie die Identität auf act.sub oder ccr:account_id anstelle von E-Mail. Tokens können auch zusätzliche Claims über diese Tabelle hinaus tragen; ignorieren Sie Claims, die Sie nicht erkennen.
Die act-Kette
Der act-Claim zeichnet den vollständigen Delegationspfad von der Benutzer- oder Dienstidentität, die die Sitzung erstellt hat, bis zur Umgebung, deren Geheimnis den Runner zugelassen hat, und die Identität, die dieses Geheimnis erstellt hat, auf. Der Ersteller ist der äußerste Akteur, daher identifiziert act.sub ihn direkt.
Abgeleitete Anmeldeinformationen beschränken
Das Sitzungs-Token identifiziert die Benutzer- oder Dienstidentität, die die Sitzung erstellt hat, aber behandeln Sie es nicht als gleichwertig mit diesem Ersteller, der sich direkt anmeldet. Das Token sitzt in einer Umgebungsvariablen innerhalb der Sitzung, daher kann jeder Code, den Claude ausführt, und jedes Tool oder MCP-Server, das die Sitzung startet, es lesen und präsentieren. Die Überprüfung ist auch offline: Ein Token, das gegen das JWKS überprüft wird, bleibt gültig bis zu seinemexp, was auch immer mit der Sitzung seitdem passiert ist, und Anthropic veröffentlicht keinen Widerrufsfeed für Sitzungs-Tokens. Binden Sie alles, das Sie vom Token ableiten, entsprechend.
Wenn Ihr Dienst das Token gegen interne Anmeldeinformationen austauscht, geben Sie Anmeldeinformationen aus, die auf das beschränkt sind, was eine Codierungssitzung erreichen sollte:
- Fähigkeiten begrenzen: Gewähren Sie Lese- und Schreibzugriff auf die Ressourcen, die die Sitzung für Codierungsaufgaben benötigt, nicht auf administrative Fähigkeiten, die der Ersteller anderswo hält.
- Lebensdauer begrenzen: Binden Sie abgeleitete Anmeldeinformationen an das
expdes Tokens oder kürzer. - Audit als Sitzung: Zeichnen Sie die
ccr:session_idundjtineben der Ersteller-Identität auf, damit Sie Aktionen auf eine bestimmte Sitzung zurückverfolgen können.
Zugehörige Umgebungsvariablen
Die Ersteller-Identität erscheint auch in einfachen Umgebungsvariablen auf zwei Oberflächen, die das Token niemals überprüfen:- Der
spawn-runner-Hook, auf dem Orchestrator: Der Hook läuft, bevor ein Runner für eine warteschlangige Sitzung existiert, und erhält die Ersteller-Identität in Variablen wieCLAUDE_RUNNER_ACCOUNT_EMAILundCLAUDE_RUNNER_ACCOUNT_ID. Der Orchestrator liest sie aus dem Arbeitsauftrag, dem signierten Einmal-Token, das das Spawnen eines Runners autorisiert, ohne die Signatur des Arbeitsauftrags selbst zu überprüfen; die Claims werden vertraut, weil der Arbeitsauftrag über die Verbindung des Orchestrators zu Anthropic ankommt, die das Umgebungsgeheimnis authentifiziert. - Wrapper-Skripte, innerhalb der Sitzung: Wrapper erhalten
CCR_SESSION_ACCOUNT_EMAIL, die E-Mail-Adresse des Erstellers, die ohne Signaturüberprüfung aus dem Token vorextrahiert wurde. Die Variable ist für Beschriftungen geeignet, wie Commit-Trailer, nicht für Auth-Entscheidungen.
CLAUDE_CODE_SESSION_ACCESS_TOKEN, wenn ein nachgelagerter Dienst unabhängigen kryptographischen Beweis benötigt, anstatt dem Runner-Umfeld zu vertrauen.
Nächste Schritte
- Selbstgehostete Umgebungen: die Umgebung, den Runner und das Sitzungsmodell; der Schnellstart und In Produktion bereitstellen enthalten Einrichtung und Betrieb
- Sitzungen anpassen: Wrapper-Skripte, die das Token verbrauchen, und der
spawn-runner-Hook - Referenz: CLI-Flags, Umgebungsvariablen und Metriken