Référence WIF
Variables d'environnement, règles de validation, configuration des profils et référence des erreurs pour Workload Identity Federation.
Cette page rassemble les surfaces de configuration, les contraintes de validation et les correspondances d'erreurs pour Workload Identity Federation. Pour des guides de configuration pas à pas, consultez les guides des fournisseurs.
Requête d'échange de jeton
POST /v1/oauth/token accepte un corps JSON utilisant le grant jwt-bearer de la RFC 7523. Les SDK construisent cette requête pour vous à partir des variables d'environnement ; les exemples cURL de chaque guide de fournisseur montrent le corps brut.
| Champ | Requis | Description |
|---|---|---|
grant_type | Oui | Toujours urn:ietf:params:oauth:grant-type:jwt-bearer. |
assertion | Oui | Le JWT OIDC émis par votre fournisseur d'identité. |
federation_rule_id | Oui | ID balisé (fdrl_...) de la règle de fédération à évaluer. |
organization_id | Oui | UUID de votre organisation Anthropic. |
service_account_id | Oui | ID balisé (svac_...) du compte de service cible. |
workspace_id | Conditionnel | ID balisé (wrkspc_...) de l'espace de travail auquel restreindre le jeton émis, ou la valeur littérale default pour l'espace de travail par défaut de l'organisation. Requis lorsque la règle est activée pour plus d'un espace de travail. Lorsqu'il est omis, le serveur sélectionne l'unique espace de travail activé de la règle. |
Réponse d'échange de jeton
POST /v1/oauth/token renvoie une réponse de jeton OAuth 2.0 standard (RFC 6749 §5.1) :
| Champ | Type | Description |
|---|---|---|
access_token | string | Le jeton Anthropic de courte durée, préfixé sk-ant-oat01-.... Transmettez-le sous la forme Authorization: Bearer <token>. |
token_type | string | Toujours Bearer. |
expires_in | integer | Nombre de secondes avant l'expiration du jeton. |
scope | string | La portée OAuth accordée par la règle correspondante. |
Variables d'environnement
Le SDK lit ces variables pour effectuer un échange de jeton fédéré sans aucun argument de constructeur.
| Variable | Requis | Description | Exemple |
|---|---|---|---|
ANTHROPIC_FEDERATION_RULE_ID | Oui | ID balisé de la règle de fédération à évaluer. | fdrl_... |
ANTHROPIC_ORGANIZATION_ID | Oui | UUID de votre organisation Anthropic. Vous le trouverez dans la Claude Console sous Settings > Organization. | 00000000-0000-0000-0000-000000000000 |
ANTHROPIC_IDENTITY_TOKEN_FILE | L'une de _TOKEN_FILE ou _TOKEN | Chemin du système de fichiers vers le JWT émis par votre « identity provider » (fournisseur d'identité), ou IdP. Le SDK relit ce fichier à chaque échange afin que les jetons projetés qui sont renouvelés sur le disque soient toujours à jour. | /var/run/secrets/anthropic.com/token |
ANTHROPIC_IDENTITY_TOKEN | L'une de _TOKEN_FILE ou _TOKEN | Le JWT littéral sous forme de chaîne. À utiliser lorsque votre plateforme injecte le jeton sous forme de variable d'environnement plutôt que de fichier. | eyJhbGciOiJSUzI1NiIs... |
ANTHROPIC_SERVICE_ACCOUNT_ID | Oui | ID balisé du compte de service Anthropic cible au nom duquel agit le jeton d'accès émis. | svac_... |
ANTHROPIC_WORKSPACE_ID | Conditionnel | ID balisé de l'espace de travail auquel restreindre le jeton émis, ou la valeur littérale default. Requis lorsque la règle de fédération est activée pour plus d'un espace de travail ; facultatif lorsque la règle est liée à un seul espace de travail. Le jeton émis est restreint à cet espace de travail au moment de l'échange, de sorte que changer d'espace de travail nécessite un nouvel échange. | wrkspc_... |
ANTHROPIC_PROFILE | Non | Nom d'un profil de configuration à charger. Prend le pas sur les variables d'environnement de fédération de ce tableau. | staging-profile |
Le chemin de fédération direct par variables d'environnement ne s'active que lorsque ANTHROPIC_FEDERATION_RULE_ID, ANTHROPIC_ORGANIZATION_ID, ANTHROPIC_SERVICE_ACCOUNT_ID et l'une de ANTHROPIC_IDENTITY_TOKEN_FILE ou ANTHROPIC_IDENTITY_TOKEN sont toutes définies. ANTHROPIC_WORKSPACE_ID est lue en parallèle mais ne conditionne pas l'activation.
Priorité des identifiants
Le SDK résout les identifiants dans cet ordre. La première source qui fournit un identifiant l'emporte.
| Ordre | Source | Remarques |
|---|---|---|
| 1 | Argument de constructeur (api_key=, auth_token=, credentials=) | Remplace toujours tout le reste. |
| 2 | ANTHROPIC_API_KEY ou ANTHROPIC_AUTH_TOKEN | Masque entièrement la fédération. Supprimez-les lors de la migration depuis les clés API. |
| 3 | ANTHROPIC_PROFILE | Charge <config_dir>/configs/<name>.json. Un profil nommé manquant est une erreur, et non un passage à la source suivante. |
| 4 | Variables d'environnement de fédération | ANTHROPIC_FEDERATION_RULE_ID + ANTHROPIC_ORGANIZATION_ID + ANTHROPIC_SERVICE_ACCOUNT_ID + ANTHROPIC_IDENTITY_TOKEN[_FILE]. |
| 5 | Profil actif | Résolu à partir de <config_dir>/active_config, avec repli sur un profil nommé default. |
Lorsqu'un profil est chargé, les variables d'environnement remplissent les champs que le profil omet, mais ne remplacent jamais les champs que le profil définit explicitement. Par exemple, ANTHROPIC_WORKSPACE_ID ne remplit workspace_id que lorsque le profil actif ne le définit pas.
Fichier de configuration de profil
Un profil est un fichier de configuration nommé que le SDK et la CLI ant lisent tous deux. Les profils vous permettent de livrer les paramètres de fédération avec votre image de conteneur ou de basculer entre environnements sans modifier le code.
Répertoire de configuration
Le SDK localise le répertoire de configuration dans cet ordre :
$ANTHROPIC_CONFIG_DIR~/.config/anthropicsous Linux et macOS%APPDATA%\Anthropicsous Windows
Profil actif
Le nom du profil actif est résolu dans cet ordre :
$ANTHROPIC_PROFILE- Le contenu de
<config_dir>/active_config(un fichier d'une ligne écrit parant profile activate <name>) - Le nom littéral
default
Claude Code et le Claude Agent SDK respectent ce même ordre de résolution, de sorte qu'un profil de fédération configuré ici authentifie également ces outils sans configuration supplémentaire.
Organisation des fichiers
| Chemin | Contenu | Sensibilité |
|---|---|---|
<config_dir>/configs/<profile>.json | version, le bloc authentication, organization_id, workspace_id et base_url. | Non secret. Peut être commité ou intégré dans une image sans risque. |
<config_dir>/credentials/<profile>.json | version, le access_token mis en cache, expires_at et (pour la connexion interactive) refresh_token. | Secret. Écrit par le SDK avec le mode 0600. |
Le fichier de configuration et le fichier d'identifiants comportent tous deux un champ version de type chaîne au niveau supérieur, au format major.minor (actuellement "1.0"). Le SDK écrit ce champ automatiquement afin que les versions futures puissent détecter et migrer les formats plus anciens ; omettez-le lorsque vous rédigez une configuration à la main et le SDK traitera le fichier comme étant à la version actuelle.
Exemple de profil de fédération
{
"version": "1.0",
"authentication": {
"type": "oidc_federation",
"federation_rule_id": "fdrl_...",
"service_account_id": "svac_...",
"identity_token": {
"source": "file",
"path": "/var/run/secrets/anthropic.com/token"
}
},
"organization_id": "00000000-0000-0000-0000-000000000000",
"workspace_id": "wrkspc_...",
"base_url": "https://api.anthropic.com"
}Si authentication.identity_token est omis, le SDK se replie sur ANTHROPIC_IDENTITY_TOKEN_FILE ou ANTHROPIC_IDENTITY_TOKEN depuis l'environnement.
Portées OAuth
La valeur oauth_scope que vous définissez sur une règle de fédération détermine quels points de terminaison de la Claude API le jeton d'accès émis peut appeler.
| Portée | Donne accès à |
|---|---|
workspace:developer | Tous les points de terminaison non administratifs de la Claude API dans l'espace de travail de la règle : Messages (y compris le streaming et le comptage de jetons), Models, Managed Agents et leurs sessions, Files et Skills. Cela correspond à l'accès dont dispose une clé API d'espace de travail dans le même espace de travail. |
workspace:inference | Les points de terminaison d'inférence dans l'espace de travail de la règle : Messages (y compris le streaming et le comptage de jetons), Models et le point de terminaison de chat compatible OpenAI. À utiliser pour les charges de travail qui ont uniquement besoin d'appeler Claude et n'ont jamais besoin de gérer des Files, des Skills ou d'autres ressources. |
workspace:manage_tunnels | L'API des tunnels MCP : créer, lister et obtenir des tunnels, enregistrer et archiver des certificats d'autorité de certification, révéler et renouveler le jeton de tunnel, et archiver des tunnels. La fenêtre modale de création de tunnel de la Console verrouille cette portée lorsque vous créez une règle depuis celle-ci. |
org:admin | Accès complet à l'Admin API (membres de l'organisation, invitations, espaces de travail, clés API et le reste). Un jeton OAuth org:admin ne peut créer ou modifier que des règles dont la portée est workspace:developer ou workspace:inference, et ne peut pas mettre à jour un émetteur qui sous-tend une règle ayant toute autre portée ; consultez les contraintes. |
Une requête vers un point de terminaison hors de la portée du jeton renvoie HTTP 403. Des portées plus fines (par ressource, ou lecture contre écriture) ne sont pas disponibles actuellement.
Limites des permissions
La valeur oauth_scope d'une règle de fédération est un plafond : le jeton émis ne peut jamais la dépasser. Le organization_role du compte de service cible (developer ou admin) détermine quelles portées peuvent être accordées, de sorte qu'une règle qui accorde org:admin doit cibler un compte de service avec organization_role=admin. Les permissions effectives sont l'intersection de la portée de la règle et du rôle du compte de service.
oauth_scope de la règle | organization_role du compte de service | Permissions effectives |
|---|---|---|
workspace:developer | admin | Accès à la Claude API dans l'espace de travail de la règle uniquement. La portée plafonne le jeton en dessous du rôle. |
org:admin | admin | Accès complet à l'Admin API (membres de l'organisation, invitations, espaces de travail, clés API et le reste), moins les exceptions applicables aux appelants OAuth ; consultez les contraintes. |
Règles de validation
Anthropic applique ces contraintes lorsque vous créez ou mettez à jour des émetteurs et des règles, et lors de la vérification d'un JWT entrant au moment de l'échange.
Pour le détail complet des paramètres et les schémas de réponse, consultez la référence de l'API Service accounts, la référence de l'API Federation issuers et la référence de l'API Federation rules.
Champs de ressource
| Champ | Contrainte |
|---|---|
name d'émetteur, de règle et de compte de service | Doit correspondre à ^[a-z0-9-]+$, longueur de 1 à 255 caractères. |
workspace_id | Requis à la création sauf si applies_to_all_workspaces vaut true. L'espace de travail (wrkspc_...) dont le quota, la facturation et les limites de débit s'appliquent aux jetons émis sous cette règle. Doit être un espace de travail de la même organisation, et le compte de service cible doit être membre de cet espace de travail. |
applies_to_all_workspaces | Booléen. Définissez true pour activer la règle dans chaque espace de travail de l'organisation au lieu d'en nommer un ; ce champ ou workspace_id est requis à la création. |
token_lifetime_seconds | Entier compris entre 60 et 86400 (1 minute à 24 heures). Valeur par défaut 3600. Les valeurs hors de cette plage sont rejetées au moment de la requête. Consultez Durée de vie et renouvellement des jetons. |
Champs d'URL
Les champs issuer_url, jwks.discovery_base et jwks.url sont validés :
| Contrainte | Détail |
|---|---|
| Schéma | Doit être https. |
| Port | Doit être 443 (explicite ou par défaut). |
| Hôte | Doit être un nom d'hôte DNS public pour votre fournisseur OIDC. Doit se résoudre en adresses IP publiques ; les littéraux IP ne sont pas acceptés. |
Les échecs de validation d'URL renvoient 400 invalid_request_error avec le nom du champ en préfixe du message d'erreur (par exemple, issuer_url: url must use https scheme).
Vérification du JWT
| Contrainte | Détail |
|---|---|
| Taille maximale | Le JWT assertion doit faire au plus 16 Kio. |
| Algorithme de signature | Seuls les algorithmes asymétriques (familles RSA et ECDSA : ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384, PS512) sont acceptés. HMAC (HS256, HS384, HS512) et none sont rejetés. |
| ID de clé | L'en-tête du JWT doit comporter un kid correspondant à une clé du JWKS de l'émetteur. Les jetons sans kid sont rejetés. |
| Revendications requises | sub doit être présente. iat doit être présente et ne pas être dans le futur. exp doit être présente et dans le futur. |
| Usage unique | Une assertion comportant une revendication jti ne peut être échangée qu'une seule fois par émetteur : répéter un échange avec le même jti est rejeté comme une relecture. Le champ check_jti de l'émetteur (activé par défaut) contrôle cette vérification ; les assertions sans revendication jti n'y sont pas soumises. Consultez la référence de l'API Federation issuers. |
| Durée de vie maximale | La durée de vie du jeton (exp moins iat) ne doit pas dépasser le maximum configuré pour l'émetteur (1 heure par défaut, configurable pour chaque émetteur dans la Claude Console). |
| Décalage d'horloge | Une tolérance de 30 secondes est appliquée à exp, nbf et iat. |
Sémantique de correspondance des règles
Le bloc match d'une règle de fédération détermine si un JWT entrant est accepté. Tous les champs renseignés sont évalués avec une sémantique ET : le JWT doit satisfaire chaque critère renseigné. Au moins l'un de subject_prefix, claims ou condition doit être défini ; un bloc match qui ne contient que audience (ou aucun critère du tout) est rejeté. Cela protège contre les règles qui accepteraient tous les jetons d'un émetteur.
| Critère | Type | Sémantique |
|---|---|---|
subject_prefix | string | Correspondance exacte avec la revendication sub du JWT. Un * final en fait une correspondance par préfixe (la valeur sub doit commencer par les caractères précédant le *). Sensible à la casse. |
audience | string | La revendication aud du JWT doit contenir cette chaîne exacte. Lorsque aud est un tableau, tout élément correspondant exactement satisfait la vérification. |
claims | map<string, string> | Chaque clé est un nom de revendication de niveau supérieur et chaque valeur est la valeur de chaîne exacte requise. Pour les revendications imbriquées, numériques, booléennes ou complexes comme les listes et les maps, utilisez plutôt condition avec une expression CEL. |
condition | string (CEL) | Une expression CEL qui doit s'évaluer à true. |
Environnement d'évaluation CEL
L'expression condition a accès à une seule variable :
| Variable | Type | Contenu |
|---|---|---|
claims | map | L'ensemble complet des revendications décodées du JWT. Les objets imbriqués sont accessibles sous forme de maps imbriquées. |
Exemple :
claims.sub.startsWith("repo:acme-corp/") && claims.ref in ["refs/heads/main", "refs/heads/release"]Erreurs
Erreurs d'échange de jeton
POST /v1/oauth/token renvoie les erreurs dans la forme d'erreur standard de l'API. Le SDK encapsule les échecs d'échange dans une FederationExchangeError typée (ou l'équivalent du langage) qui expose le statut HTTP, le corps de la réponse et le request_id.
| Statut | Erreur | Cause | Résolution |
|---|---|---|---|
| 400 | invalid_request_error | federation_rule_id est mal formé ou un champ requis de la requête est manquant. | Vérifiez l'ID fdrl_ et que le corps de la requête inclut tous les champs requis. |
| 400 | invalid_request_error | workspace_id est présent mais n'est pas un ID wrkspc_... bien formé ni la valeur littérale default. | Corrigez la valeur de workspace_id ; le message de réponse indique le format attendu. |
| 401 | authentication_error | La revendication iss du JWT n'est pas exactement égale à l'issuer_url enregistrée. | Comparez octet par octet, y compris les barres obliques finales et le schéma : jq -rR 'split(".")[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson | .iss' <<< "$JWT". |
| 401 | authentication_error | La récupération du JWKS a échoué, le JWKS est obsolète, ou le JWT a été signé avec une clé absente du JWKS. | Pour le mode inline, mettez à jour l'émetteur avec les clés renouvelées. Pour discovery et explicit_url, confirmez que le point de terminaison JWKS est joignable sur le port 443 ; si l'émetteur a récemment renouvelé sa clé de signature, consultez Rotation des clés et mise en cache. |
| 401 | authentication_error | La revendication exp du JWT est dans le passé (au-delà de la fenêtre de décalage de 30 secondes). | Confirmez que votre fournisseur d'identité projette un jeton récent et que le SDK relit le fichier de jeton. |
| 401 | authentication_error | Le JWT a été vérifié mais ses revendications ne satisfont pas le bloc match de la règle. | Décodez le JWT et comparez chaque revendication à la règle. subject_prefix est sensible à la casse. audience exige une correspondance exacte d'un élément. |
| 401 | authentication_error | Le federation_rule_id n'existe pas, est archivé, ou le JWT n'est pas autorisé pour celui-ci (consolidé pour empêcher l'énumération). | Confirmez l'ID de la règle dans la Claude Console et que la règle n'a pas été archivée. |
| 401 | authentication_error | La règle de fédération est activée pour plus d'un espace de travail et la requête omet workspace_id. L'entrée de l'historique d'authentification indique la raison workspace_id_required. | Définissez ANTHROPIC_WORKSPACE_ID (ou le champ de corps workspace_id sur une requête brute) sur l'ID wrkspc_... auquel vous souhaitez restreindre le jeton. Consultez Requête d'échange de jeton. |
Chaque refus d'assertion renvoie la même authentication_error 401 opaque avec le message fixe Authentication failed, quelle que soit la vérification ayant échoué ; une erreur distinguable permettrait à un appelant de sonder la configuration des règles. La raison du refus est enregistrée sur l'entrée de la tentative dans l'historique d'authentification, par exemple match_subject_prefix lorsque la revendication sub ne satisfait pas le subject_prefix de la règle, ou workspace_id_required lorsque la règle couvre plusieurs espaces de travail et que la requête n'en nomme aucun. Les requêtes rejetées avant que l'organisation de la règle ne soit corroborée (la famille 400 invalid_request_error ci-dessus) ne laissent aucune entrée d'historique ; leurs messages de réponse nomment directement le problème. Une 401 sans entrée d'historique correspondante signifie généralement que le federation_rule_id lui-même n'a pas été reconnu.
Échecs courants côté SDK
| Symptôme | Cause | Résolution |
|---|---|---|
| Le SDK signale « no credentials » au lieu d'effectuer l'échange | L'une de ANTHROPIC_FEDERATION_RULE_ID, ANTHROPIC_ORGANIZATION_ID, ANTHROPIC_SERVICE_ACCOUNT_ID ou ANTHROPIC_IDENTITY_TOKEN[_FILE] n'est pas définie et aucun profil n'est actif. | Définissez les quatre variables, ou configurez un profil. |
| Le SDK s'authentifie avec une clé API au lieu de fédérer | ANTHROPIC_API_KEY ou ANTHROPIC_AUTH_TOKEN est définie et l'emporte en priorité. | Supprimez la variable de clé ou de jeton. |
FileNotFoundError à la première requête | Le chemin dans ANTHROPIC_IDENTITY_TOKEN_FILE n'existe pas. Le SDK ouvre le fichier de manière paresseuse au moment de l'échange. | Confirmez que le volume de jeton projeté est monté et que le chemin correspond. |
| L'échange de jeton réussit mais une requête à la Claude API renvoie 403 | La portée du jeton émis ne donne pas accès à ce point de terminaison. | Vérifiez l'oauth_scope de la règle par rapport aux portées OAuth. |
| L'authentification échoue avec un identifiant vide | Une variable d'environnement d'identifiant est exportée mais définie sur une chaîne vide. Les valeurs vides remportent tout de même leur place dans l'ordre de priorité. | Supprimez la variable avec unset VAR plutôt que VAR="". |
Dépanner un échange en échec
Une réponse 401 authentication_error est intentionnellement opaque et son message est toujours Authentication failed ; la raison du refus est enregistrée dans l'historique d'authentification, et non dans la réponse.
Un échec opaque courant est une assertion rejouée : une assertion comportant une revendication jti ne peut être échangée qu'une seule fois, de sorte qu'une charge de travail qui renvoie le même JWT (une boucle de nouvelles tentatives, ou un renouvellement qui relit un jeton non renouvelé) est rejetée au second échange. La page de l'historique d'authentification affiche ces tentatives avec la raison jti_reused ; la solution consiste à émettre une nouvelle assertion pour chaque échange.
Si vous devez encore déboguer à partir du JWT lui-même, effectuez ces vérifications dans l'ordre :
Décoder le JWT
Décodez l'assertion que vous avez envoyée afin de pouvoir comparer chaque revendication à la configuration de votre émetteur et de votre règle :
cURLjq -rR 'split(".")[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson' <<< "$JWT"Vérifier que iss correspond à l'émetteur
La revendication
issdécodée doit être égale à l'issuer_urlenregistrée octet par octet, y compris le schéma, le port et toute barre oblique finale. Une différence d'un seul caractère fait échouer la vérification.Vérifier que aud correspond à la règle
La revendication
auddécodée doit contenir la valeuraudiencede la règle en correspondance exacte. Lorsqueaudest un tableau, un élément doit correspondre exactement.Vérifier sub et chaque entrée de claims
Comparez
subausubject_prefixde la règle (sensible à la casse ; un*final est une correspondance par préfixe, tout le reste est exact). Comparez chaque clé de la mapclaimsde la règle à la revendication de niveau supérieur du même nom.Vérifier exp, nbf et iat
expdoit être dans le futur etnbf/iatdoivent être dans le passé, dans la fenêtre de décalage de 30 secondes. Si l'horloge de l'hôte de la charge de travail a dérivé, un jeton par ailleurs valide est rejeté.Vérifier l'accessibilité du JWKS
Pour le mode
discovery, récupérez<jwks.discovery_base or issuer_url>/.well-known/openid-configurationvia HTTPS public sur le port 443 et confirmez quejwks_urise résout. Pourexplicit_url, récupérez directement l'URL du JWKS. Pourinline, confirmez que la clé de signature de l'émetteur n'a pas été renouvelée depuis que vous avez enregistré les clés.Si l'émetteur a renouvelé sa clé de signature et a immédiatement commencé à signer avec celle-ci, les échanges peuvent échouer pendant jusqu'à une minute pendant que le cache JWKS d'Anthropic se rafraîchit. Consultez Rotation des clés et mise en cache.
Modes de source JWKS
Lorsque vous enregistrez un émetteur de fédération, le champ jwks contrôle la manière dont Anthropic obtient les clés publiques utilisées pour vérifier les signatures JWT de cet émetteur. Il s'agit d'une union discriminée indexée sur type :
jwks.type | Forme de jwks | Comportement | À utiliser lorsque |
|---|---|---|---|
discovery (par défaut) | { "type": "discovery", "discovery_base": "https://..." } (discovery_base est facultatif ; définissez-le lorsque l'URL de découverte diffère de issuer_url) | Anthropic récupère <discovery_base or issuer_url>/.well-known/openid-configuration, lit jwks_uri dans le document de découverte et récupère le JWKS à partir de là. | Votre IdP sert un document de découverte OIDC standard sur l'internet public. La plupart des fournisseurs gérés (EKS, GKE, Cloud Run, GitHub Actions, Entra ID) le prennent en charge. |
explicit_url | { "type": "explicit_url", "url": "https://..." } | Anthropic récupère le JWKS directement depuis url. L'issuer_url n'est utilisée que pour la comparaison de chaîne avec la revendication iss du JWT et n'est jamais contactée. | Votre IdP ne sert pas de document de découverte, ou la découverte est uniquement interne mais le JWKS est publiquement accessible. |
inline | { "type": "inline", "keys": [...] } | Vous fournissez le tableau d'objets JWK en ligne (le tableau keys du document JWKS, et non l'objet enveloppe). Anthropic n'effectue aucune requête sortante. L'issuer_url n'est utilisée que pour la comparaison avec iss. | Environnements isolés (air-gapped), clusters Kubernetes autogérés avec des URL d'émetteur internes au cluster, ou lorsque vous souhaitez un contrôle explicite sur la rotation des clés. |
L'union discriminée rend les champs associés mutuellement exclusifs par construction. discovery et explicit_url acceptent également tous deux une chaîne facultative ca_cert_pem pour les émetteurs qui servent TLS à partir d'une autorité de certification privée.
Rotation des clés et mise en cache
Dans les modes discovery et explicit_url, Anthropic met en cache le JWKS récupéré. Si votre fournisseur d'identité publie une nouvelle clé de signature et commence immédiatement à signer des jetons avec celle-ci, les échanges qui présentent ces jetons peuvent échouer avec une erreur de signature pendant jusqu'à 1 minute pendant que le cache se rafraîchit.
Pour éviter cette fenêtre, publiez une nouvelle clé de signature dans le JWKS au moins 15 minutes avant que votre fournisseur d'identité ne commence à signer des jetons avec celle-ci, et conservez la clé remplacée dans le JWKS jusqu'à ce que les jetons qu'elle a signés aient expiré. Les fournisseurs d'identité gérés suivent généralement cette discipline d'eux-mêmes. Si vous exploitez votre propre émetteur (un cluster Kubernetes autogéré, un fournisseur de découverte OIDC SPIRE, ou un serveur d'autorisation personnalisé Okta avec une cadence de rotation configurée), confirmez que votre politique de rotation publie les nouvelles clés avant leur première utilisation.
Was this page helpful?