Okta peut agir comme fournisseur d'identité de charge de travail en émettant des jetons d'accès OIDC à une application de service via l'octroi OAuth 2.0 client_credentials. Votre charge de travail s'authentifie auprès d'Okta (généralement avec private_key_jwt, de sorte qu'aucun secret partagé n'est stocké), reçoit un « JSON Web Token » (jeton Web JSON), ou JWT, signé, et échange ce JWT avec Anthropic contre un jeton d'accès de courte durée.
L'URL de l'émetteur du serveur d'autorisation Okta prend la forme https://<your-domain>.okta.com/oauth2/<auth-server-id>. Si vous utilisez le serveur par défaut intégré, le chemin est /oauth2/default.
Vous devez utiliser un serveur d'autorisation personnalisé Okta (y compris celui nommé default). Les jetons émis directement par le serveur d'autorisation de l'organisation Okta (le point de terminaison /oauth2/v1/token sans identifiant de serveur d'autorisation dans le chemin) ne peuvent pas être validés par des parties externes car Okta ne publie pas de clés de signature pour ceux-ci.
Il existe de nombreuses façons de configurer et de s'authentifier auprès d'Okta qui sortent du cadre de cette documentation. Assurez-vous que vos mécanismes de configuration et d'authentification suivent les directives et les pratiques de sécurité de votre entreprise.
/v1/token d'Okta et d'atteindre api.anthropic.com.À un niveau général, vous devez :
La navigation exacte dépend de la configuration de votre organisation Okta et de la version de la console d'administration. Les étapes numérotées suivantes décrivent un cheminement courant :
private_key_jwt) et enregistrez la JWK publique de votre charge de travail. Vous pouvez également utiliser un secret client si votre environnement peut en stocker un de manière sécurisée. Pour l'exemple suivant, vous devrez peut-être désactiver l'exigence DPoP sur l'application ; assurez-vous que votre configuration de production respecte les exigences de sécurité de votre organisation.https://api.anthropic.com afin que les jetons d'accès émis portent cette revendication aud. Anthropic valide aud par rapport à cette valeur fixe.anthropic.access). Okta rejette les requêtes client_credentials qui n'incluent pas une portée accordée.Pour une application de service utilisant client_credentials, Okta définit la revendication sub du jeton d'accès émis sur le Client ID de l'application, et iss sur l'URL de l'émetteur du serveur d'autorisation.
Dans la Claude Console, ouvrez Settings → Workload identity, cliquez sur Connect workload et sélectionnez Custom OIDC. L'assistant vous guide à travers l'enregistrement de l'émetteur, la création d'un compte de service et la création d'une règle de fédération.
L'assistant crée ces ressources pour vous. Utilisez les valeurs suivantes, que vous les saisissiez dans l'assistant ou que vous les envoyiez à l'Admin API :
Émetteur de fédération : Utilisez l'URL de votre serveur d'autorisation personnalisé Okta et le mode de découverte. Anthropic lit le document de découverte .well-known/openid-configuration d'Okta et récupère le JWKS à partir du jwks_uri qu'il annonce.
{
"name": "okta-prod",
"issuer_url": "https://acme.okta.com/oauth2/aus1a2b3c4d5e6f7g8h9",
"jwks": { "type": "discovery" }
}Règle de fédération : Effectuez une correspondance sur la revendication sub d'Okta, qui est le Client ID de l'application de service. Si vous avez défini des revendications personnalisées dans Okta, vous pouvez effectuer une correspondance sur celles-ci à la place avec la map claims ou une condition CEL.
{
"name": "okta-pipeline",
"issuer_id": "fdis_...",
"match": {
"subject_prefix": "0oa1b2c3d4e5f6g7h8i9",
"audience": "https://api.anthropic.com"
},
"target": { "type": "service_account", "service_account_id": "svac_..." },
"workspace_id": "wrkspc_...",
"oauth_scope": "workspace:developer",
"token_lifetime_seconds": 600
}Contrairement aux fournisseurs natifs de plateforme (AWS, Google Cloud, Kubernetes), qui rendent un jeton disponible à l'intérieur de l'environnement d'exécution de la charge de travail (via un fichier projeté ou un point de terminaison de métadonnées local), Okta ne le fait pas. Votre charge de travail doit appeler le point de terminaison de jeton d'Okta pour obtenir un JWT, puis transmettre ce JWT au SDK Anthropic en tant que jeton d'identité.
import os
import httpx
import anthropic
from anthropic import WorkloadIdentityCredentials
def fetch_okta_token() -> str:
response = httpx.post(
f"{os.environ['OKTA_ISSUER']}/v1/token",
data={
"grant_type": "client_credentials",
"scope": "anthropic.access",
"client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
# Construire le JWT client_assertion RFC 7523 signé avec la clé privée de votre application Okta
"client_assertion": build_signed_client_assertion(),
},
)
response.raise_for_status()
return response.json()["access_token"]
client = anthropic.Anthropic(
credentials=WorkloadIdentityCredentials(
identity_token_provider=fetch_okta_token,
federation_rule_id=os.environ["ANTHROPIC_FEDERATION_RULE_ID"],
organization_id=os.environ["ANTHROPIC_ORGANIZATION_ID"],
service_account_id=os.environ["ANTHROPIC_SERVICE_ACCOUNT_ID"],
workspace_id=os.environ.get("ANTHROPIC_WORKSPACE_ID"),
),
)
message = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Claude"}],
)
print(next(block.text for block in message.content if block.type == "text"))Chaque onglet de SDK montre le modèle d'appel : le SDK Anthropic appelle à nouveau votre fournisseur de jeton d'identité chaque fois que le jeton d'accès Anthropic approche de son expiration, donc votre récupérateur Okta doit renvoyer un jeton frais à chaque appel plutôt que d'en mettre un en cache indéfiniment. La CLI ant relit ANTHROPIC_IDENTITY_TOKEN_FILE à chaque échange, donc actualisez ce fichier à intervalle régulier pour les shells de longue durée.
Un échange réussi renvoie un access_token commençant par sk-ant-oat01- et une valeur expires_in en secondes. En cas de 400 invalid_grant, consultez Dépanner un échange échoué ; la cause la plus courante côté Okta est une incohérence de issuer_url (elle doit inclure le chemin /oauth2/<auth-server-id> ; le serveur d'autorisation de l'organisation Okta n'est pas utilisable).
Plusieurs applications de service sous le même serveur d'autorisation Okta partagent le même
émetteur. Une règle qui omet subject_prefix correspond à chaque application de service sur ce
serveur, de sorte que toute équipe pouvant en enregistrer une pourrait obtenir un jeton Anthropic
fédéré.
Verrouillez le bloc match de la règle à la portée la plus étroite qui convient à votre cas d'usage :
subject_prefix sur le Client ID complet de l'application de service sans * final.audience que vous avez configurée sur le serveur d'autorisation afin que les jetons émis pour une audience différente soient rejetés.claims de la règle ou une condition CEL.Was this page helpful?