Usa WIF con Microsoft Entra ID
Federa las identidades administradas de Azure y Entra Workload Identity con la Claude API para que tus cargas de trabajo de Azure puedan llamar a Claude sin claves de API estáticas.
Las cargas de trabajo de Azure se autentican en la Claude API presentando un JSON Web Token (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:
- Registra la audiencia del token: Crea un "app registration" (registro de aplicación) en tu "tenant" (inquilino) de Microsoft Entra para representar la audiencia de la Claude API. Todas las cargas de trabajo del inquilino solicitan tokens de Entra para él.
- Configura la identidad para tu plataforma: Una "managed identity" (identidad administrada) en VMs, VM Scale Sets, App Service, Functions y Container Apps, o Entra Workload Identity en AKS.
- Configura Anthropic: Registra el emisor de Entra de tu inquilino, crea una cuenta de servicio y escribe una regla de federación que coincida con los "claims" (notificaciones) del token.
- Intercambia en tiempo de ejecución: Tu carga de trabajo intercambia su token emitido por Entra en
POST /v1/oauth/tokenpor un token de acceso de Anthropicsk-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 inquilino 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 correspondiente al lugar donde 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.
Requisitos previos
- Familiaridad con los conceptos de WIF: cuentas de servicio, emisores de federación y reglas de federación.
- Una suscripción de Azure con permiso para asignar identidades administradas (o configurar Entra Workload Identity en AKS).
- Permiso para crear un registro de aplicación y una "service principal" (entidad de servicio) en tu inquilino de Microsoft Entra (la audiencia compartida de la Claude API). Entra solo emite tokens para una audiencia que exista en el inquilino, por lo que el paso Registra la audiencia del token es obligatorio antes de que cualquier solicitud de token tenga éxito.
- El ID de tu inquilino de Microsoft Entra. Encuéntralo en el portal de Azure en Microsoft Entra ID → Overview → Tenant ID.
- Permiso para crear cuentas de servicio, emisores de federación y reglas de federación en la Claude Console para tu organización de Anthropic.
Registra la audiencia del token
Microsoft Entra ID solo emite un token cuando la audiencia solicitada existe en tu inquilino como un registro de aplicación con una entidad de servicio. Crea un registro de aplicación para representar la audiencia de la Claude API; todas las cargas de trabajo del inquilino pueden 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 token de Entra).
# Crea el registro de aplicación que representa la audiencia de la Claude API.
APP_ID=$(az ad app create --display-name claude-api-federation --query appId -o tsv)
# Solicita tokens de acceso v2.0 y establece el URI identificador api://<APP_ID>.
az ad app update --id "$APP_ID" \
--identifier-uris "api://$APP_ID" \
--set api.requestedAccessTokenVersion=2
# Crea la entidad de servicio para que la audiencia se resuelva en tu inquilino.
az ad sp create --id "$APP_ID"Usa una identidad administrada
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 token local de la plataforma y luego intercambia ese JWT con Anthropic.
Configura la identidad administrada
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).
Una vez creada la identidad, anota su Object (principal) ID. Este GUID aparece tanto en el claim
subcomo en el claimoiddel 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 una entidad de servicio en Microsoft Entra ID, no un registro de aplicación).Encuentra el endpoint de token de la plataforma
La plataforma expone un endpoint de token local una vez que la identidad está adjunta:
- VMs y VM Scale Sets: IMDS en
http://169.254.169.254/metadata/identity/oauth2/tokencon el encabezadoMetadata: trueyapi-version=2018-02-01. - App Service, Functions y Container Apps: La URL en la variable de entorno
IDENTITY_ENDPOINTcon el encabezadoX-IDENTITY-HEADERestablecido en el valor deIDENTITY_HEADER, yapi-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 deoidde tu regla de federación; si no la tiene, la solicitud falla directamente en cuanto se adjunta una segunda identidad asignada por el usuario.- VMs y VM Scale Sets: IMDS en
Decodifica un token de muestra
Solicita un token al 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 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 oidEl ID de objeto de la identidad administrada, idéntico a subQuieres autorizar una identidad administrada específica. Este es el valor predeterminado; la regla en Configura Anthropic coincide con él. azpEl ID de cliente de la identidad que llama Quieres autorizar todas las cargas de trabajo que comparten un registro de aplicación. Para una identidad administrada, azpes único para esa identidad, por lo que es equivalente aoid.audEl ID de cliente del registro de aplicación de audiencia (el GUID <APP_ID>de Registra la audiencia del token)Siempre. El campo audiencede la regla debe ser exactamente igual al valorauddel token.tidEl ID de tu inquilino Quieres defensa en profundidad. La URL del emisor ya fija el inquilino. Si el claim
verdel token decodificado es1.0, los nombres y valores de los claims difieren. Consulta Si tus tokens son v1.0 antes de continuar.
Configura Anthropic
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 inquilinos que reutilizan registros antiguos que aún emiten tokens v1.0). Entra publica un documento de descubrimiento OIDC en la URL del emisor por inquilino, así que usa el modo de descubrimiento. Cada inquilino 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
}Una vida útil aceptada más larga significa que un token de Entra filtrado sigue siendo 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 inquilino. 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 audiencia (el GUID <APP_ID> de Registra la audiencia del token). Usa el valor aud exacto 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 la del token de Entra; el SDK lo actualiza por ti.
Adquiere y usa el token
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 del endpoint de token 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 audiencia de Registra la audiencia del token.
import os
import anthropic
import requests
from anthropic import WorkloadIdentityCredentials
# El URI identificador del registro de la aplicación de 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"))Verifica la configuración
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. Si el intercambio falla con la respuesta opaca 401 authentication_error (mensaje Authentication failed), revisa la página de historial de autenticación para ver el motivo de denegación, luego decodifica el token de Entra (consulta Soluciona un intercambio fallido para ver el comando) y revisa las causas más comunes del lado de Azure:
- Discrepancia de emisor: El
issuer_urlregistrado debe coincidir exactamente con el claimissdel token. Un token v2.0 llevahttps://login.microsoftonline.com/<TENANT_ID>/v2.0; si el claimverdecodificado es1.0, consulta Si tus tokens son v1.0. - Vida útil del token: Los tokens de identidad administrada llevan hasta 24 horas entre
iatyexp. Si el emisor aún tiene el7500del asistente (o el valor predeterminado de 1 hora), aumentamax_jwt_lifetime_secondsa86400como se describe en Configura Anthropic. - Discrepancia de audiencia: El
audiencede la regla debe ser exactamente igual alauddel token: el ID de cliente del registro de aplicación de audiencia para los tokens v2.0 que configura esta guía. - Discrepancia de nombre de claim: Una regla que coincide con un claim que el token no lleva nunca pasa. Los tokens v1.0 llevan el ID de cliente en
appid, no enazp; consulta Si tus tokens son v1.0.
Usa Entra Workload Identity en AKS
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 mantenerse 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 (grant client_credentials federado) por un token de acceso emitido por Entra, y luego pasa ese token de Entra al SDK de Anthropic como token de identidad.
Configura Entra Workload Identity
Habilita el emisor OIDC y workload identity en tu clúster
Habilitar workload identity instala el webhook de mutación
azure-workload-identitypor 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 claimoidcon 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 con el que coincide 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-identitylee la anotaciónazure.workload.identity/client-idpara inyectarAZURE_CLIENT_IDen el pod, que los ejemplos en Adquiere y usa el token leen del 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://AzureADTokenExchangees la audiencia fija de Entra para los tokens de cuenta de servicio de Kubernetes entrantes; no está relacionado con la audiencia de la Claude API 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 inyectaAZURE_FEDERATED_TOKEN_FILE,AZURE_CLIENT_IDyAZURE_TENANT_IDen el pod. El archivo enAZURE_FEDERATED_TOKEN_FILEcontiene 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 que devuelve 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 }subyoidson el ID de objeto de la identidad administrada,audes el ID de cliente del registro de aplicación de audiencia yazpes el ID de cliente de la identidad administrada (el valor deAZURE_CLIENT_ID). La vida útil difiere de la ruta de identidad administrada: los tokensclient_credentialstienen por defecto una ventana aleatoria de 60 a 90 minutos entreiatyexp, no 24 horas.
Configura Anthropic
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 inquilinos que reutilizan registros antiguos que aún emiten tokens v1.0). Entra publica un documento de descubrimiento OIDC en la URL del emisor por inquilino, así que usa el modo de descubrimiento. Cada inquilino 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
}Una vida útil aceptada más larga significa que un token de Entra filtrado sigue siendo 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 inquilino. 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 audiencia (el GUID <APP_ID> de Registra la audiencia del token). Usa el valor aud exacto 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 la del token de Entra; el SDK lo actualiza por ti.
Adquiere y usa el token
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 token 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.
En los ejemplos aparecen dos ID de cliente diferentes. <APP_ID> es el ID de cliente del registro de aplicación de 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 a quien llama. No sustituyas uno por el otro.
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"))Verifica la configuración
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. Si el intercambio falla con la respuesta opaca 401 authentication_error (mensaje Authentication failed), revisa la página de historial de autenticación para ver el motivo de denegación, luego decodifica el token emitido por Entra del paso 1 (consulta Soluciona un intercambio fallido para ver el comando) y revisa las causas más comunes del lado de Azure:
- Discrepancia de emisor: El
issuer_urlregistrado debe coincidir exactamente con el claimissdel token. Un token v2.0 llevahttps://login.microsoftonline.com/<TENANT_ID>/v2.0; si el claimverdecodificado es1.0, consulta Si tus tokens son v1.0. - Vida útil del token: Si una política de vida útil de tokens del inquilino o CAE extiende el token
client_credentialsmás allá de 7500 segundos, aumenta elmax_jwt_lifetime_secondsdel emisor como se describe en Configura Anthropic. - Discrepancia de audiencia: El
audiencede la regla debe ser exactamente igual alauddel token: el ID de cliente del registro de aplicación de audiencia para los tokens v2.0 que configura esta guía. - Discrepancia de nombre de claim: Una regla que coincide con un claim que el token no lleva nunca pasa. Los tokens v1.0 llevan el ID de cliente en
appid, no enazp; consulta Si tus tokens son v1.0.
Si tus tokens son v1.0
Esta guía configura el registro de aplicación de audiencia con api.requestedAccessTokenVersion: 2, por lo que todos los tokens que muestra son 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 revisa su claim ver; si es 1.0, cambian cuatro cosas:
- Emisor: El claim
isseshttps://sts.windows.net/<TENANT_ID>/en lugar dehttps://login.microsoftonline.com/<TENANT_ID>/v2.0. Registra la URL del emisor exactamente como la lleva el claimissde tu token. Las dos URL comparten el mismo JWKS, por lo que el modo de descubrimiento funciona para cualquiera de las dos. - Selector del asistente: Elige v1 (sts.windows.net) en el selector Token issuer del asistente Connect workload en lugar de v2.0 (login.microsoftonline.com).
- Audiencia: El claim
audes el URI de identificador que pasaste comoresource(por ejemplo,api://<APP_ID>), no el ID de cliente del registro. Establece elaudiencede la regla de federación en el valoraudexacto de tu token decodificado. - Claim de ID de cliente: El ID de cliente de la identidad que llama aparece en
appid, no enazp. Los dos claims nunca aparecen en el mismo token, por lo que una regla que coincide conazpnunca pasa frente a 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.
Delimita tu regla
Una regla de federación puede coincidir con el sujeto del token mediante 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 GUID 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.
Restringe el bloque match de la regla al alcance más estrecho que se ajuste a tu caso de uso:
- Haz coincidir
oidcomo valor exacto: Establececlaims.oiden el ID de objeto completo de la identidad administrada. Unsubject_prefixestablecido en ese ID de objeto completo es equivalente (el asistente de la Console establece ambos); nunca uses unsubject_prefixcon comodín o GUID parcial, que coincide con más identidades de las que pretendes. - Fija
tidcomo defensa en profundidad: La URL del emisor ya fija tu inquilino, pero agregarclaims.tidprotege contra la desviación de configuración si el registro del emisor se edita más adelante. - Fija la audiencia: Establece
audienceen el valoraudexacto de tu token decodificado para que se rechacen los tokens emitidos para otras aplicaciones. - Usa una regla separada para cada identidad administrada: Crea una regla para cada identidad en lugar de una regla que autorice a varias, de modo que puedas revocar el acceso de una sola carga de trabajo sin afectar a las demás.
Próximos pasos
- Revisa el modelo de configuración completo en Workload Identity Federation.
- Consulta las guías de proveedores para AWS, Google Cloud, GitHub Actions y Kubernetes.
- Para variables de entorno, archivos de perfil y precedencia de credenciales, consulta la referencia de WIF.
Was this page helpful?