Les environnements auto-hébergés sont en bêta publique sur les plans Team et Enterprise ; un propriétaire les active en activant Allow self-hosted environments sur la page d’administration Cloud environments. Cette page couvre la vérification de l’identité de session ; consultez le guide de démarrage rapide pour la configuration et Déployer en production pour les recettes de flotte.
CLAUDE_CODE_SESSION_ACCESS_TOKEN. Une session présente le token comme n’importe quelle credential de porteur ; par exemple, un script que Claude exécute peut appeler votre service avec curl -H "Authorization: Bearer $CLAUDE_CODE_SESSION_ACCESS_TOKEN". Anthropic signe le token et publie les clés de vérification à un endpoint JWKS public. Vos services récupèrent ces clés, vérifient la signature et lisent les claims pour décider quel accès accorder.
Le token de session
Avant d’écrire le code de vérification, comprenez ce que le token établit et la forme que votre bibliothèque JWT verra.Ce que le token prouve
Un token valide établit certains faits et délibérément pas d’autres :- Prouve : Anthropic a émis le token pour une session spécifique dans un environnement spécifique, et comment la session a été créée : par un utilisateur de votre organisation, ou par l’identité de service de votre organisation, ce qui est la façon dont les sessions de canal Claude Tag commencent
- Ne prouve pas : quel processus sur l’hôte du runner le présente. Le token se trouve dans une variable d’environnement à l’intérieur de la session, donc tout code que Claude exécute, et tout outil ou serveur MCP que la session démarre, peut le lire et le présenter.
- Vérifiez le claim
audpar rapport à votre ID d’environnement, la valeurccpool_...affichée avec votre environnement sur la page d’administration Cloud environments, pour rejeter les tokens émis pour l’environnement de toute autre organisation. - Limitez les credentials que vous dérivez du token à ce qu’une seule session de codage devrait pouvoir faire, pas à tout ce que le créateur de la session peut faire. Voir Limiter les credentials dérivés.
Format du token
La valeur deCLAUDE_CODE_SESSION_ACCESS_TOKEN a un préfixe sk-ant-cc- suivi d’un JWT standard en trois parties :
sk-ant-si- à la place et sont signés par un ensemble de clés différent, donc rejetez toute valeur qui ne commence pas par sk-ant-cc-.
L’algorithme de signature est ES256, qui est ECDSA sur la courbe P-256 avec SHA-256. L’en-tête du token porte un kid qui identifie quelle clé dans le JWKS l’a signé.
Vérifier le token
La vérification s’exécute dans l’un de deux endroits. Les services de votre réseau vérifient le token de manière cryptographique par rapport aux clés publiées d’Anthropic, et les scripts wrapper à l’intérieur de la session peuvent utiliser le décodeur intégré du binaire du runner à la place.Vérifier le token depuis votre service
Anthropic publie les clés de vérification à un endpoint public et non authentifié :Cache-Control: public, max-age=300, donc mettre en cache l’ensemble de clés et refetcher toutes les cinq minutes est sûr.
Vérifiez chaque token entrant par rapport à ces vérifications :
1
Vérifier le préfixe
Rejetez la valeur si elle ne commence pas par
sk-ant-cc-, puis supprimez ce préfixe. Le reste est un JWT compact standard.2
Vérifier la signature
Récupérez le JWKS, sélectionnez la clé dont le
kid correspond à l’en-tête du token, et vérifiez la signature ES256. Rejetez les tokens dont l’en-tête alg n’est pas ES256. Si un token arrive avec un kid qui n’est pas dans votre ensemble de clés en cache, refetchez le JWKS une fois avant de le rejeter : après une rotation, les nouveaux tokens sont signés avec une clé que votre ensemble en cache n’a pas encore.3
Vérifier l'émetteur
Rejetez le token si
iss n’est pas exactement ccr.4
Vérifier l'audience par rapport à votre environnement
Le claim
aud est un tableau. Rejetez le token à moins qu’il ne contienne votre ID d’environnement, qui a la forme ccpool_.... L’ID d’environnement est affiché dans la boîte de dialogue de détail de votre environnement sur la page d’administration Cloud environments, et apparaît comme le claim ccr:pool_id dans l’un des tokens de session de l’environnement. Cette vérification est ce qui limite le token à votre environnement et rejette les tokens émis pour d’autres organisations.5
Vérifier le rôle
Rejetez le token si
ccr:role n’est pas exactement session_worker. D’autres tokens émis pour les environnements auto-hébergés, tels que les secrets d’environnement, les tokens de runner et les ordres de travail, sont signés par le même ensemble de clés mais portent des rôles différents.6
Vérifier l'expiration
Rejetez le token si
exp est dans le passé. Anthropic émet les tokens de session avec une durée de vie de quatre heures par défaut et un maximum de huit heures. Le runner rafraîchit le token avant l’expiration et pousse la nouvelle valeur à la session, donc les sous-processus que Claude démarre après un rafraîchissement l’héritent. Une session peut donc présenter plusieurs tokens valides distincts à votre service au cours de sa durée de vie.7
Lire l'identité
L’identité de l’utilisateur créateur est dans le claim
act : act.sub est son ID utilisateur Anthropic sous la forme préfixée user:<id>, et act.email, quand la surface créatrice en a enregistré un, est son adresse e-mail. Les sessions que l’identité de service de votre organisation crée, y compris les sessions de canal Claude Tag, portent un sujet agent: à la place, donc traitez une session comme créée par l’utilisateur uniquement quand act.sub porte le préfixe user:, plutôt que de tester si les claims d’identité sont absents. Voir la référence des claims pour la structure complète et les claims en double plats.jose, qui gère la récupération du JWKS, la mise en cache et la sélection du kid, et en Python avec PyJWT et son client JWKS intégré.
- Node.js (jose)
- Python (PyJWT)
Vérifier le token à l’intérieur de la session
Les scripts wrapper s’exécutent à l’intérieur de la session, avant que Claude ne démarre. Au lieu d’appeler une bibliothèque JWT, ils peuvent exécuter la sous-commandeself-hosted-runner decode-token du binaire du runner. La sous-commande lit le token à partir d’un argument positionnel, de CLAUDE_CODE_SESSION_ACCESS_TOKEN, ou de stdin canalisé, dans cet ordre, puis supprime le préfixe, vérifie la signature par rapport à l’endpoint JWKS, vérifie l’expiration et imprime les claims en JSON. La sous-commande effectue uniquement les vérifications de signature et d’expiration ; elle ne vérifie pas iss, aud ou ccr:role. Quand la décision d’authentification de votre wrapper dépend de ces claims, lisez-les à partir du JSON imprimé et comparez-les explicitement.
Cette commande extrait l’identité du créateur, en préférant le sujet du fournisseur SSO, puis l’adresse e-mail, puis le sujet act.sub du créateur, user:<id> ou agent:<id> :
CLAUDE_RUNNER_CLAUDE_BIN ; utilisez ce chemin plutôt qu’un claude résolu par PATH afin que le décodage s’exécute sur le même binaire que le runner lui-même utilise.
Utilisez jq -re plutôt que jq -r afin qu’un claim manquant provoque une sortie non-zéro. Avec -r seul, un claim manquant imprime la chaîne littérale null et sort zéro, ce qui transmet silencieusement une mauvaise valeur en aval. Passez --no-verify à decode-token uniquement pour l’inspection hors ligne où l’endpoint JWKS est inaccessible.
Référence des claims
Le tableau ci-dessous énumère les claims du token de session pertinents pour la vérification. Lisez l’identité à partir de l’espace de nomsccr:* et de la chaîne act ; les claims plats account_email, organization_uuid et account_uuid sont des doublons de compatibilité rétroactive qui peuvent être supprimés. Les sessions que l’identité de service de votre organisation crée, y compris les sessions de canal Claude Tag, portent un sujet agent: dans act.sub et omettent act.email, ccr:account_id, account_email et account_uuid. Les deux claims d’e-mail sont également facultatifs pour les sessions créées par l’utilisateur : Anthropic les enregistre à la création de la session uniquement quand les credentials de la demande créatrice portent un e-mail, et une session envoyée depuis la CLI peut manquer les deux, donc basez l’identité sur act.sub ou ccr:account_id plutôt que sur l’e-mail. Les tokens peuvent également porter des claims supplémentaires au-delà de ce tableau ; ignorez les claims que vous ne reconnaissez pas.
La chaîne act
Le claim act enregistre le chemin de délégation complet de l’identité de l’utilisateur ou du service qui a créé la session jusqu’à l’environnement dont le secret a admis le runner, et l’identité qui a créé ce secret. Le créateur est l’acteur le plus externe, donc act.sub l’identifie directement.
Limiter les credentials dérivés
Le token de session identifie l’utilisateur ou l’identité de service qui a créé la session, mais ne le traitez pas comme équivalent à ce créateur se connectant directement. Le token se trouve dans une variable d’environnement à l’intérieur de la session, donc tout code que Claude exécute, et tout outil ou serveur MCP que la session démarre, peut le lire et le présenter. La vérification est également hors ligne : un token qui se vérifie par rapport au JWKS reste valide jusqu’à sonexp, quoi qu’il se soit passé pour la session depuis, et Anthropic ne publie pas un flux de révocation pour les tokens de session. Limitez tout ce que vous dérivez du token en conséquence.
Quand votre service échange le token pour des credentials internes, émettez des credentials limités à ce qu’une seule session de codage devrait atteindre :
- Limiter les capacités : accordez l’accès en lecture et en écriture aux ressources dont la session a besoin pour les tâches de codage, pas aux capacités administratives que le créateur détient ailleurs.
- Limiter la durée de vie : limitez les credentials dérivés à l’
expdu token, ou moins. - Auditer en tant que session : enregistrez le
ccr:session_idet lejtiaux côtés de l’identité du créateur afin de pouvoir retracer les actions jusqu’à une session spécifique.
Variables d’environnement associées
L’identité du créateur apparaît également dans les variables d’environnement en clair sur deux surfaces qui ne vérifient jamais le token :- Le hook
spawn-runner, sur l’orchestrateur : le hook s’exécute avant que tout runner n’existe pour une session en attente et reçoit l’identité du créateur dans des variables telles queCLAUDE_RUNNER_ACCOUNT_EMAILetCLAUDE_RUNNER_ACCOUNT_ID. L’orchestrateur les lit à partir de l’ordre de travail, le token à usage unique signé qui autorise le spawning d’un runner, sans vérifier la signature de l’ordre de travail lui-même ; les claims sont de confiance car l’ordre de travail arrive sur la connexion de l’orchestrateur à Anthropic, que le secret d’environnement authentifie. - Scripts wrapper, à l’intérieur de la session : les wrappers reçoivent
CCR_SESSION_ACCOUNT_EMAIL, l’e-mail du créateur pré-extrait du token sans vérification de signature. La variable convient pour l’étiquetage, tel que les remorques de commit, pas pour les décisions d’authentification.
CLAUDE_CODE_SESSION_ACCESS_TOKEN quand un service en aval a besoin d’une preuve cryptographique indépendante plutôt que de faire confiance à l’environnement du runner.
Prochaines étapes
- Environnements auto-hébergés : l’environnement, le runner et le modèle de session ; le guide de démarrage rapide et Déployer en production contiennent la configuration et les opérations
- Personnaliser les sessions : les scripts wrapper qui consomment le token, et le hook
spawn-runner - Référence : les drapeaux CLI, les variables d’environnement et les métriques