Las cargas de trabajo de Azure se autentican ante la API de Claude presentando un "JSON Web Token" (token web JSON), o JWT, emitido por Microsoft Entra ID, y luego intercambiándolo por un token de acceso de Anthropic de corta duración. La configuración sigue la misma forma en todas las plataformas de Azure:
POST /v1/oauth/token por un token de acceso de Anthropic sk-ant-oat01-... y llama a Claude con él.En ambas rutas, el token que presentas a Anthropic lleva el emisor de Entra específico de tu tenant y el ID de objeto de la identidad administrada en los claims sub y oid; solo difiere la forma en que la carga de trabajo obtiene ese token. Elige la sección según dónde se ejecuta tu carga de trabajo: Usa una identidad administrada para VMs, VM Scale Sets, App Service, Functions o Container Apps; Usa Entra Workload Identity en AKS para AKS.
Microsoft Entra ID solo emite un token cuando la audiencia solicitada existe en tu tenant como un registro de aplicación con un service principal. Crea un registro de aplicación para representar la audiencia de la API de Claude; cada carga de trabajo en el tenant puede solicitar tokens para él. Sin este registro, las solicitudes de token fallan con un error "resource not found in tenant" (AADSTS50001 desde los endpoints de identidad administrada, AADSTS500011 desde el endpoint de tokens de Entra).
# Crea el registro de aplicación que representa la audiencia de la API de Claude.
APP_ID=$(az ad app create --display-name claude-api-federation --query appId -o tsv)
# Solicita tokens de acceso v2.0 y configura el URI identificador api://<APP_ID>.
az ad app update --id "$APP_ID" \
--identifier-uris "api://$APP_ID" \
--set api.requestedAccessTokenVersion=2
# Crea el service principal para que la audiencia se resuelva en tu tenant.
az ad sp create --id "$APP_ID"Usa el formato de URI de identificador api://<APP_ID>. Entra restringe los URIs de identificador https:// a dominios verificados de tu propio tenant, por lo que un URI como https://api.anthropic.com no puede registrarse en la mayoría de los tenants; api://<APP_ID> se acepta en todas partes. Con requestedAccessTokenVersion: 2, los tokens para esta audiencia son v2.0, que es lo que asume esta guía. Si reutilizas un registro existente que emite tokens v1.0, consulta Si tus tokens son v1.0.
Usa esta ruta cuando tu carga de trabajo se ejecuta en una VM, un VM Scale Set, App Service, Functions o Container Apps. La carga de trabajo solicita un JWT emitido por Entra para su identidad administrada asignada desde el endpoint de tokens local de la plataforma, y luego intercambia ese JWT con Anthropic.
Adjunta una identidad administrada
Habilita una identidad administrada asignada por el sistema o asignada por el usuario en tu recurso de Azure. En el portal de Azure, abre el recurso, ve a Identity y activa System assigned (o adjunta una identidad asignada por el usuario).
Después de que se cree la identidad, anota su Object (principal) ID. Este GUID aparece como los claims sub y oid en el token emitido, y tu regla de federación de Anthropic coincidirá con él. Puedes encontrarlo en la página Identity del recurso; para una identidad asignada por el usuario, es el Object (principal) ID en la página Overview del recurso de identidad administrada. (Una identidad administrada solo tiene un service principal en Microsoft Entra ID, no un registro de aplicación.)
Encuentra el endpoint de tokens de la plataforma
La plataforma expone un endpoint de tokens local una vez que la identidad está adjunta:
http://169.254.169.254/metadata/identity/oauth2/token con el encabezado Metadata: true y api-version=2018-02-01.IDENTITY_ENDPOINT con el encabezado X-IDENTITY-HEADER establecido al valor de IDENTITY_HEADER, y api-version=2019-08-01. IMDS no es accesible en estas plataformas.Si el recurso tiene más de una identidad administrada asignada por el usuario, agrega client_id=<IDENTITY_CLIENT_ID> a la solicitud de token para seleccionar una. Azure recomienda especificarlo siempre. Sin él, el resultado depende de si el recurso también tiene habilitada una identidad asignada por el sistema: si la tiene, la solicitud recurre silenciosamente a esa identidad y luego falla la coincidencia de oid de tu regla de federación; si no la tiene, la solicitud falla directamente tan pronto como se adjunta una segunda identidad asignada por el usuario.
Decodifica un token de muestra
Solicita un token desde el endpoint y decodifica su payload para confirmar los claims con los que tu regla de federación necesita coincidir. (Para el comando de decodificación, consulta Soluciona problemas de un intercambio fallido.) Un token v2.0 para una identidad administrada lleva estos claims:
{
"iss": "https://login.microsoftonline.com/<TENANT_ID>/v2.0",
"sub": "9f8e7d6c-1a2b-3c4d-5e6f-...",
"aud": "<APP_ID>",
"oid": "9f8e7d6c-1a2b-3c4d-5e6f-...",
"tid": "<TENANT_ID>",
"azp": "<IDENTITY_CLIENT_ID>",
"ver": "2.0",
"exp": 1775527120
}| Claim | Valor | Coincide con esto cuando |
|---|---|---|
oid | El ID de objeto de la identidad administrada, idéntico a sub | Quieres autorizar una identidad administrada específica. Este es el valor predeterminado; la regla en Configura Anthropic coincide con él. |
azp | El ID de cliente de la identidad que llama | Quieres autorizar cada carga de trabajo que comparte un registro de aplicación. Para una identidad administrada, azp es único para esa identidad, por lo que es equivalente a oid. |
aud | El ID de cliente del registro de aplicación de la audiencia (el GUID <APP_ID> de Registra la audiencia del token) | Siempre. El campo audience de la regla debe ser exactamente igual al valor aud del token. |
tid | El ID de tu tenant | Quieres defensa en profundidad. La URL del emisor ya fija el tenant. |
Si el claim ver del token decodificado es 1.0, los nombres y valores de los claims difieren. Consulta Si tus tokens son v1.0 antes de continuar.
En la Claude Console, abre Settings → Workload identity, haz clic en Connect workload y selecciona el mosaico Microsoft Entra. El asistente te guía a través del registro del emisor, la creación de una cuenta de servicio y la creación de una regla de federación.
El asistente crea estos recursos por ti. Usa los siguientes valores, ya sea que los ingreses en el asistente o los envíes a la Admin API:
Emisor de federación: Elige v2.0 (login.microsoftonline.com) en el selector Token issuer del asistente. (El selector tiene v1 como valor predeterminado; ese valor predeterminado existe para tenants que reutilizan registros más antiguos que todavía emiten tokens v1.0.) Entra publica un documento de descubrimiento OIDC en la URL del emisor por tenant, así que usa el modo de descubrimiento. Cada tenant de Microsoft Entra que federes necesita su propio registro de emisor.
{
"name": "azure-prod-tenant",
"issuer_url": "https://login.microsoftonline.com/<TENANT_ID>/v2.0",
"jwks": { "type": "discovery" },
"max_jwt_lifetime_seconds": 86400
}Las cargas de trabajo con identidad administrada necesitan max_jwt_lifetime_seconds: 86400. Azure emite tokens de identidad administrada con hasta 24 horas entre iat y exp porque almacena en caché el token de cada recurso durante esa ventana y no ofrece forma de forzar una actualización anticipada, y el valor predeterminado de 1 hora del emisor rechaza esos tokens con invalid_grant. El mosaico Microsoft Entra del asistente Connect workload crea el emisor con max_jwt_lifetime_seconds establecido en 7500 y no proporciona ningún campo para cambiarlo durante la creación, así que termina el asistente, luego abre Settings → Workload identity → Issuers, edita el emisor y aumenta el valor a 86400. También puedes actualizar el emisor a través de la Admin API.
Una vida útil aceptada más larga significa que un token de Entra filtrado permanece intercambiable durante más tiempo. Si un token se filtra, la palanca es deshabilitar la regla de federación; una coincidencia estricta de oid limita qué identidades pueden intercambiar un token en primer lugar, como se describe en Delimita tu regla.
Regla de federación: Haz coincidir el ID de objeto de la identidad administrada y el ID de tu tenant. Para los tokens v2.0 que configura esta guía, el valor de audience es el ID de cliente del registro de aplicación de la audiencia (el GUID <APP_ID> de Registra la audiencia del token). Usa el valor exacto de aud de tu token decodificado.
{
"name": "azure-inference-worker",
"issuer_id": "fdis_...",
"match": {
"audience": "<APP_ID>",
"claims": {
"oid": "9f8e7d6c-1a2b-3c4d-5e6f-...",
"tid": "<TENANT_ID>"
}
},
"target": {
"type": "service_account",
"service_account_id": "svac_..."
},
"workspace_id": "wrkspc_...",
"oauth_scope": "workspace:developer",
"token_lifetime_seconds": 600
}token_lifetime_seconds es la vida útil del token de acceso de Anthropic que devuelve el intercambio, no del token de Entra; el SDK lo actualiza por ti.
En tiempo de ejecución, tu carga de trabajo obtiene su token de Entra, lo intercambia en POST /v1/oauth/token y usa el token bearer devuelto para llamar a Claude. Cada SDK de Anthropic maneja el intercambio y el ciclo de actualización cuando proporcionas un callable proveedor de tokens, como se muestra en los siguientes ejemplos. La pestaña cURL muestra el flujo sin procesar.
Los ejemplos obtienen el token de identidad administrada desde el endpoint de tokens de la plataforma: IMDS en VMs y VM Scale Sets, o el servicio IDENTITY_ENDPOINT en App Service, Functions y Container Apps. Reemplaza <APP_ID> en el valor de recurso api://<APP_ID> con el ID de cliente del registro de aplicación de la audiencia de Registra la audiencia del token.
Si tu carga de trabajo ya usa la biblioteca cliente Azure Identity, pasa su adquisición de tokens (DefaultAzureCredential con el scope api://<APP_ID>/.default) como el proveedor de tokens de identidad en lugar de llamar directamente a los endpoints de tokens. La biblioteca selecciona el endpoint correcto en todas las plataformas de Azure, incluido AKS con Entra Workload Identity.
import os
import anthropic
import requests
from anthropic import WorkloadIdentityCredentials
# El URI identificador del registro de aplicación de la audiencia (consulta Registrar la audiencia del token).
AUDIENCE = "api://<APP_ID>"
def fetch_entra_token() -> str:
"""Fetch a managed identity token from the platform's token endpoint."""
# Con varias identidades asignadas por el usuario, agrega client_id=<IDENTITY_CLIENT_ID>
# a los parámetros de la solicitud para seleccionar una.
if endpoint := os.environ.get("IDENTITY_ENDPOINT"):
# App Service, Functions, Container Apps
response = requests.get(
endpoint,
headers={"X-IDENTITY-HEADER": os.environ["IDENTITY_HEADER"]},
params={"api-version": "2019-08-01", "resource": AUDIENCE},
timeout=5,
)
else:
# VM o VM Scale Set: Azure Instance Metadata Service (IMDS)
response = requests.get(
"http://169.254.169.254/metadata/identity/oauth2/token",
headers={"Metadata": "true"},
params={"api-version": "2018-02-01", "resource": AUDIENCE},
timeout=5,
)
response.raise_for_status()
return response.json()["access_token"]
client = anthropic.Anthropic(
credentials=WorkloadIdentityCredentials(
identity_token_provider=fetch_entra_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 from Azure"}],
)
print(next(block.text for block in message.content if block.type == "text"))Desde tu recurso de Azure, ejecuta el intercambio cURL que se muestra en Adquiere y usa el token y confirma que POST /v1/oauth/token devuelve un 200 con un access_token que comienza con sk-ant-oat01- y un valor expires_in en segundos. Ante un 400 invalid_grant, decodifica el token de Entra (consulta Soluciona problemas de un intercambio fallido para el comando) y verifica las causas más comunes del lado de Azure:
issuer_url registrado debe coincidir exactamente con el claim iss del token. Un token v2.0 lleva https://login.microsoftonline.com/<TENANT_ID>/v2.0; si el claim ver decodificado es 1.0, consulta Si tus tokens son v1.0.iat y exp. Si el emisor todavía tiene el 7500 del asistente (o el valor predeterminado de 1 hora), aumenta max_jwt_lifetime_seconds a 86400 como se describe en Configura Anthropic.audience de la regla debe ser exactamente igual al aud del token: el ID de cliente del registro de aplicación de la audiencia para los tokens v2.0 que configura esta guía.appid, no en azp; consulta Si tus tokens son v1.0.Usa esta ruta cuando tu carga de trabajo se ejecuta en un pod de AKS. Entra Workload Identity federa una cuenta de servicio de Kubernetes con una identidad administrada asignada por el usuario: Kubernetes proyecta un token de cuenta de servicio (firmado por el emisor OIDC del clúster de AKS) en el pod en la ruta indicada en AZURE_FEDERATED_TOKEN_FILE. Ese token proyectado no es un token emitido por Entra, por lo que para permanecer en la ruta mediada por Entra descrita en esta página, la carga de trabajo realiza un intercambio de dos saltos: primero canjea el token proyectado en https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/token (concesión client_credentials federada) por un token de acceso emitido por Entra, y luego pasa ese token de Entra al SDK de Anthropic como el token de identidad.
Los pods de AKS pueden, alternativamente, omitir el intercambio de Entra y presentar el token de cuenta de servicio proyectado por Kubernetes directamente a Anthropic. Esa ruta registra el emisor OIDC de tu clúster de AKS con Anthropic en lugar de tu tenant de Entra. Consulta Usa WIF con Kubernetes para ese flujo.
Habilita el emisor OIDC y la identidad de carga de trabajo en tu clúster
Habilitar la identidad de carga de trabajo instala el webhook mutante azure-workload-identity por ti; despliégalo manualmente solo en clústeres que no sean AKS. Captura la URL del emisor OIDC del clúster para la credencial federada que crearás en un paso posterior.
az aks update \
--resource-group <RESOURCE_GROUP> \
--name <CLUSTER_NAME> \
--enable-oidc-issuer \
--enable-workload-identity
AKS_OIDC_ISSUER=$(az aks show \
--resource-group <RESOURCE_GROUP> \
--name <CLUSTER_NAME> \
--query oidcIssuerProfile.issuerUrl -o tsv)Crea una identidad administrada asignada por el usuario
Captura dos valores de la identidad: el Client ID va en la anotación de la cuenta de servicio (y se inyecta en el pod como AZURE_CLIENT_ID), y el Object (principal) ID aparece como el claim oid con el que coincide tu regla de federación de Anthropic.
az identity create \
--resource-group <RESOURCE_GROUP> \
--name claude-inference-identity \
--location <LOCATION>
# Va en la anotación de la cuenta de servicio; se inyecta en el pod como AZURE_CLIENT_ID.
IDENTITY_CLIENT_ID=$(az identity show \
--resource-group <RESOURCE_GROUP> \
--name claude-inference-identity \
--query clientId -o tsv)
# Aparece como el claim oid que coincide con tu regla de federación.
IDENTITY_OBJECT_ID=$(az identity show \
--resource-group <RESOURCE_GROUP> \
--name claude-inference-identity \
--query principalId -o tsv)Crea la cuenta de servicio de Kubernetes anotada
El webhook azure-workload-identity lee la anotación azure.workload.identity/client-id para inyectar AZURE_CLIENT_ID en el pod, que los ejemplos en Adquiere y usa el token leen desde el entorno.
apiVersion: v1
kind: ServiceAccount
metadata:
name: claude-inference
namespace: inference
annotations:
azure.workload.identity/client-id: <IDENTITY_CLIENT_ID>Crea la credencial federada en la identidad administrada
La credencial federada confía en el emisor OIDC de tu clúster para esa cuenta de servicio específica. El valor --audience api://AzureADTokenExchange es la audiencia fija de Entra para los tokens de cuenta de servicio de Kubernetes entrantes; no está relacionado con la audiencia de la API de Claude que registraste anteriormente.
az identity federated-credential create \
--resource-group <RESOURCE_GROUP> \
--identity-name claude-inference-identity \
--name claude-inference-aks \
--issuer "$AKS_OIDC_ISSUER" \
--subject system:serviceaccount:inference:claude-inference \
--audience api://AzureADTokenExchangeEtiqueta el pod y establece su cuenta de servicio
El pod debe llevar la etiqueta azure.workload.identity/use: "true" y ejecutarse como la cuenta de servicio anotada. El webhook entonces inyecta AZURE_FEDERATED_TOKEN_FILE, AZURE_CLIENT_ID y AZURE_TENANT_ID en el pod. El archivo en AZURE_FEDERATED_TOKEN_FILE contiene el token de cuenta de servicio proyectado por Kubernetes, firmado por el emisor OIDC del clúster de AKS.
apiVersion: v1
kind: Pod
metadata:
name: inference-worker
namespace: inference
labels:
azure.workload.identity/use: "true"
spec:
serviceAccountName: claude-inference
containers:
- name: app
image: your-registry/inference-worker:latestDecodifica un token de muestra
El token que ve tu regla de federación de Anthropic no es el archivo proyectado; es el token emitido por Entra devuelto por el intercambio client_credentials. Desde dentro de un pod etiquetado, ejecuta el paso 1 del ejemplo cURL en Adquiere y usa el token y decodifica el resultado. Lleva la misma forma de claims que la ruta de identidad administrada:
{
"iss": "https://login.microsoftonline.com/<TENANT_ID>/v2.0",
"sub": "9f8e7d6c-1a2b-3c4d-5e6f-...",
"aud": "<APP_ID>",
"oid": "9f8e7d6c-1a2b-3c4d-5e6f-...",
"tid": "<TENANT_ID>",
"azp": "<IDENTITY_CLIENT_ID>",
"ver": "2.0",
"exp": 1775527120
}sub y oid son el ID de objeto de la identidad administrada, aud es el ID de cliente del registro de aplicación de la audiencia, y azp es el ID de cliente de la identidad administrada (el valor de AZURE_CLIENT_ID). La vida útil difiere de la ruta de identidad administrada: los tokens client_credentials tienen por defecto una ventana aleatoria de 60 a 90 minutos entre iat y exp, no 24 horas.
En la Claude Console, abre Settings → Workload identity, haz clic en Connect workload y selecciona el mosaico Microsoft Entra. El asistente te guía a través del registro del emisor, la creación de una cuenta de servicio y la creación de una regla de federación.
El asistente crea estos recursos por ti. Usa los siguientes valores, ya sea que los ingreses en el asistente o los envíes a la Admin API:
Emisor de federación: Elige v2.0 (login.microsoftonline.com) en el selector Token issuer del asistente. (El selector tiene v1 como valor predeterminado; ese valor predeterminado existe para tenants que reutilizan registros más antiguos que todavía emiten tokens v1.0.) Entra publica un documento de descubrimiento OIDC en la URL del emisor por tenant, así que usa el modo de descubrimiento. Cada tenant de Microsoft Entra que federes necesita su propio registro de emisor.
{
"name": "azure-prod-tenant",
"issuer_url": "https://login.microsoftonline.com/<TENANT_ID>/v2.0",
"jwks": { "type": "discovery" },
"max_jwt_lifetime_seconds": 7500
}El mosaico Microsoft Entra del asistente Connect workload crea el emisor con max_jwt_lifetime_seconds establecido en 7500 (poco más de 2 horas), lo que cubre la vida útil predeterminada de 60 a 90 minutos de los tokens client_credentials. Una política de vida útil de tokens del tenant o la Evaluación Continua de Acceso (CAE) pueden extender esa vida útil. Si el exp menos iat de tu token decodificado excede los 7500 segundos, edita el emisor en Settings → Workload identity → Issuers y aumenta max_jwt_lifetime_seconds para que coincida, o los intercambios fallarán con invalid_grant. Si tu tenant también ejecuta cargas de trabajo con identidad administrada de Usa una identidad administrada, usa el valor 86400 de esa sección, que cubre ambas rutas.
Una vida útil aceptada más larga significa que un token de Entra filtrado permanece intercambiable durante más tiempo. Si un token se filtra, la palanca es deshabilitar la regla de federación; una coincidencia estricta de oid limita qué identidades pueden intercambiar un token en primer lugar, como se describe en Delimita tu regla.
Regla de federación: Haz coincidir el ID de objeto de la identidad administrada y el ID de tu tenant. Para los tokens v2.0 que configura esta guía, el valor de audience es el ID de cliente del registro de aplicación de la audiencia (el GUID <APP_ID> de Registra la audiencia del token). Usa el valor exacto de aud de tu token decodificado.
{
"name": "azure-inference-worker",
"issuer_id": "fdis_...",
"match": {
"audience": "<APP_ID>",
"claims": {
"oid": "9f8e7d6c-1a2b-3c4d-5e6f-...",
"tid": "<TENANT_ID>"
}
},
"target": {
"type": "service_account",
"service_account_id": "svac_..."
},
"workspace_id": "wrkspc_...",
"oauth_scope": "workspace:developer",
"token_lifetime_seconds": 600
}token_lifetime_seconds es la vida útil del token de acceso de Anthropic que devuelve el intercambio, no del token de Entra; el SDK lo actualiza por ti.
En tiempo de ejecución, el pod realiza el intercambio de dos saltos: envía el token proyectado por Kubernetes (el archivo en AZURE_FEDERATED_TOKEN_FILE) al endpoint de tokens de Entra como una aserción client_credentials federada, y luego intercambia el token de acceso de Entra resultante en POST /v1/oauth/token. Cada SDK de Anthropic maneja el segundo intercambio y el ciclo de actualización cuando proporcionas la obtención de Entra como un callable proveedor de tokens, como se muestra en los siguientes ejemplos. La pestaña cURL muestra el flujo sin procesar.
Dos IDs de cliente diferentes aparecen en los ejemplos. <APP_ID> es el ID de cliente del registro de aplicación de la audiencia de Registra la audiencia del token; el scope api://<APP_ID>/.default le pide a Entra un token dirigido a esa audiencia. $AZURE_CLIENT_ID es el ID de cliente de la identidad administrada, inyectado por el webhook, e identifica al llamador. No sustituyas uno por el otro.
Si tu carga de trabajo ya usa la biblioteca cliente Azure Identity, pasa su adquisición de tokens (DefaultAzureCredential con el scope api://<APP_ID>/.default) como el proveedor de tokens de identidad en lugar de realizar el intercambio de dos saltos tú mismo. La biblioteca lee las mismas variables de entorno AZURE_FEDERATED_TOKEN_FILE, AZURE_CLIENT_ID y AZURE_TENANT_ID y maneja el intercambio de Entra.
import os
from pathlib import Path
import anthropic
import requests
from anthropic import WorkloadIdentityCredentials
def fetch_entra_token_via_federation() -> str:
federated_token = Path(os.environ["AZURE_FEDERATED_TOKEN_FILE"]).read_text()
response = requests.post(
f"https://login.microsoftonline.com/{os.environ['AZURE_TENANT_ID']}/oauth2/v2.0/token",
data={
"client_id": os.environ["AZURE_CLIENT_ID"],
"grant_type": "client_credentials",
"scope": "api://<APP_ID>/.default",
"client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
"client_assertion": federated_token,
},
timeout=5,
)
response.raise_for_status()
return response.json()["access_token"]
client = anthropic.Anthropic(
credentials=WorkloadIdentityCredentials(
identity_token_provider=fetch_entra_token_via_federation,
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 from Azure"}],
)
print(next(block.text for block in message.content if block.type == "text"))Desde dentro de un pod etiquetado, ejecuta el intercambio cURL que se muestra en Adquiere y usa el token y confirma que POST /v1/oauth/token devuelve un 200 con un access_token que comienza con sk-ant-oat01- y un valor expires_in en segundos. Ante un 400 invalid_grant, decodifica el token emitido por Entra del paso 1 (consulta Soluciona problemas de un intercambio fallido para el comando) y verifica las causas más comunes del lado de Azure:
issuer_url registrado debe coincidir exactamente con el claim iss del token. Un token v2.0 lleva https://login.microsoftonline.com/<TENANT_ID>/v2.0; si el claim ver decodificado es 1.0, consulta Si tus tokens son v1.0.client_credentials más allá de 7500 segundos, aumenta el max_jwt_lifetime_seconds del emisor como se describe en Configura Anthropic.audience de la regla debe ser exactamente igual al aud del token: el ID de cliente del registro de aplicación de la audiencia para los tokens v2.0 que configura esta guía.appid, no en azp; consulta Si tus tokens son v1.0.Esta guía configura el registro de aplicación de la audiencia con api.requestedAccessTokenVersion: 2, por lo que cada token que muestra es v2.0. Si reutilizas un registro existente que deja requestedAccessTokenVersion sin establecer, Entra emite tokens v1.0 en su lugar. Decodifica un token de muestra y verifica su claim ver; si es 1.0, cambian cuatro cosas:
iss es https://sts.windows.net/<TENANT_ID>/ en lugar de https://login.microsoftonline.com/<TENANT_ID>/v2.0. Registra la URL del emisor exactamente como la lleva el claim iss de tu token. Las dos URLs comparten el mismo JWKS, por lo que el modo de descubrimiento funciona para cualquiera de las dos.aud es el URI de identificador que pasaste como resource (por ejemplo, api://<APP_ID>), no el ID de cliente del registro. Establece el audience de la regla de federación al valor exacto de aud de tu token decodificado.appid, no en azp. Los dos claims nunca aparecen en el mismo token, por lo que una regla que coincide con azp nunca pasa contra un token v1.0.Los claims oid, sub y tid llevan los mismos valores en ambas versiones, por lo que el resto de esta guía se aplica sin cambios.
Una regla de federación puede coincidir con el sujeto del token usando subject_prefix además de (o en lugar de) el mapa claims; consulta Semántica de coincidencia de reglas para ver cómo se combinan los campos. Los valores sub de Entra para estas identidades son GUIDs canónicos de longitud fija, por lo que un subject_prefix que contenga el ID de objeto completo de 36 caracteres coincide solo con ese sujeto; esta es una propiedad del formato de sujeto de Entra, no de subject_prefix en general.
Cada identidad en tu tenant puede solicitar un token para la audiencia registrada,
por lo que audience y tid por sí solos no identifican una carga de trabajo específica. Una regla que
omite una coincidencia de oid (o azp/appid), o que usa un subject_prefix comodín o
con un GUID parcial, autoriza a cada identidad administrada y service
principal en el tenant.
Bloquea el bloque match de la regla al alcance más estrecho que se ajuste a tu caso de uso:
oid como un valor exacto: Establece claims.oid al ID de objeto completo de la identidad administrada. Un subject_prefix establecido a ese ID de objeto completo es equivalente (el asistente de la Console establece ambos); nunca uses un subject_prefix comodín o con un GUID parcial, que coincide con más identidades de las que pretendes.tid como defensa en profundidad: La URL del emisor ya fija tu tenant, pero agregar claims.tid protege contra la deriva de configuración si el registro del emisor se edita más adelante.audience al valor exacto de aud de tu token decodificado para que los tokens acuñados para otras aplicaciones sean rechazados.Was this page helpful?