Usare WIF con Microsoft Entra ID
Federa le identità gestite di Azure e Entra Workload Identity con la Claude API in modo che i tuoi carichi di lavoro Azure possano chiamare Claude senza chiavi API statiche.
I carichi di lavoro Azure si autenticano alla Claude API presentando un JSON Web Token (JWT) emesso da Microsoft Entra ID, quindi scambiandolo con un token di accesso Anthropic di breve durata. La configurazione segue la stessa struttura su ogni piattaforma Azure:
- Registra l'audience del token: Crea una app registration nel tuo tenant Microsoft Entra per rappresentare l'audience della Claude API. Ogni carico di lavoro nel tenant richiede token Entra per essa.
- Configura l'identità per la tua piattaforma: Una "managed identity" (identità gestita) su VM, VM Scale Set, App Service, Functions e Container Apps, oppure Entra Workload Identity su AKS.
- Configura Anthropic: Registra l'issuer Entra del tuo tenant, crea un service account e scrivi una regola di federazione che corrisponda ai claim del token.
- Scambia a runtime: Il tuo carico di lavoro scambia il proprio token emesso da Entra presso
POST /v1/oauth/tokencon un token di accesso Anthropicsk-ant-oat01-...e chiama Claude con esso.
In entrambi i percorsi il token che presenti ad Anthropic contiene l'issuer Entra specifico del tuo tenant e l'object ID dell'identità gestita nei claim sub e oid; cambia solo il modo in cui il carico di lavoro ottiene quel token. Scegli la sezione relativa a dove viene eseguito il tuo carico di lavoro: Usare un'identità gestita per VM, VM Scale Set, App Service, Functions o Container Apps; Usare Entra Workload Identity su AKS per AKS.
Prerequisiti
- Familiarità con i concetti di WIF: service account, issuer di federazione e regole di federazione.
- Una sottoscrizione Azure con il permesso di assegnare identità gestite (o di configurare Entra Workload Identity su AKS).
- Il permesso di creare una app registration e un service principal nel tuo tenant Microsoft Entra (l'audience condivisa della Claude API). Entra emette token solo per un'audience che esiste nel tenant, quindi il passaggio Registrare l'audience del token è obbligatorio prima che qualsiasi richiesta di token abbia successo.
- L'ID del tuo tenant Microsoft Entra. Lo trovi nel portale Azure in Microsoft Entra ID → Overview → Tenant ID.
- Il permesso di creare service account, issuer di federazione e regole di federazione nella Claude Console per la tua organizzazione Anthropic.
Registrare l'audience del token
Microsoft Entra ID emette un token solo quando l'audience richiesta esiste nel tuo tenant come app registration con un service principal. Crea una app registration per rappresentare l'audience della Claude API; ogni carico di lavoro nel tenant può richiedere token per essa. Senza questa registrazione, le richieste di token falliscono con un errore "resource not found in tenant" (AADSTS50001 dagli endpoint dell'identità gestita, AADSTS500011 dall'endpoint token di Entra).
# Crea la registrazione dell'app che rappresenta l'audience della Claude API.
APP_ID=$(az ad app create --display-name claude-api-federation --query appId -o tsv)
# Richiedi token di accesso v2.0 e imposta l'URI identificatore api://<APP_ID>.
az ad app update --id "$APP_ID" \
--identifier-uris "api://$APP_ID" \
--set api.requestedAccessTokenVersion=2
# Crea il service principal affinché l'audience venga risolta nel tuo tenant.
az ad sp create --id "$APP_ID"Usare un'identità gestita
Usa questo percorso quando il tuo carico di lavoro viene eseguito su una VM, un VM Scale Set, App Service, Functions o Container Apps. Il carico di lavoro richiede un JWT emesso da Entra per la propria identità gestita assegnata dall'endpoint token locale della piattaforma, quindi scambia quel JWT con Anthropic.
Configurare l'identità gestita
Collega un'identità gestita
Abilita un'identità gestita assegnata dal sistema o assegnata dall'utente sulla tua risorsa Azure. Nel portale Azure, apri la risorsa, vai su Identity e attiva System assigned (oppure collega un'identità assegnata dall'utente).
Dopo che l'identità è stata creata, annota il suo Object (principal) ID. Questo GUID appare sia come claim
subsia come claimoidnel token emesso, e la tua regola di federazione Anthropic effettuerà la corrispondenza su di esso. Puoi trovarlo nella pagina Identity della risorsa; per un'identità assegnata dall'utente, è l'Object (principal) ID nella pagina Overview della risorsa identità gestita. (Un'identità gestita ha solo un service principal in Microsoft Entra ID, non una app registration.)Trova l'endpoint token della piattaforma
La piattaforma espone un endpoint token locale una volta che l'identità è collegata:
- VM e VM Scale Set: IMDS all'indirizzo
http://169.254.169.254/metadata/identity/oauth2/tokencon l'headerMetadata: trueeapi-version=2018-02-01. - App Service, Functions e Container Apps: L'URL nella variabile d'ambiente
IDENTITY_ENDPOINTcon l'headerX-IDENTITY-HEADERimpostato al valore diIDENTITY_HEADER, eapi-version=2019-08-01. IMDS non è raggiungibile su queste piattaforme.
Se la risorsa ha più di un'identità gestita assegnata dall'utente, aggiungi
client_id=<IDENTITY_CLIENT_ID>alla richiesta di token per selezionarne una. Azure raccomanda di specificarlo sempre. Senza di esso, il risultato dipende dal fatto che la risorsa abbia anche un'identità assegnata dal sistema abilitata: se la ha, la richiesta ricade silenziosamente su quell'identità e poi fallisce la corrispondenzaoiddella tua regola di federazione; se non la ha, la richiesta fallisce direttamente non appena viene collegata una seconda identità assegnata dall'utente.- VM e VM Scale Set: IMDS all'indirizzo
Decodifica un token di esempio
Richiedi un token dall'endpoint e decodifica il suo payload per confermare i claim su cui la tua regola di federazione deve effettuare la corrispondenza. (Per il comando di decodifica, consulta Risolvere i problemi di uno scambio fallito.) Un token v2.0 per un'identità gestita contiene questi claim:
{ "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 Valore Effettua la corrispondenza quando oidL'object ID dell'identità gestita, identico a subVuoi autorizzare una specifica identità gestita. Questo è il comportamento predefinito; la regola in Configurare Anthropic effettua la corrispondenza su di esso. azpIl client ID dell'identità chiamante Vuoi autorizzare ogni carico di lavoro che condivide una app registration. Per un'identità gestita, azpè univoco per quell'identità, quindi è equivalente aoid.audIl client ID della app registration dell'audience (il GUID <APP_ID>da Registrare l'audience del token)Sempre. Il campo audiencedella regola deve essere esattamente uguale al valoreauddel token.tidL'ID del tuo tenant Vuoi una difesa in profondità. L'URL dell'issuer vincola già il tenant. Se il claim
verdel token decodificato è1.0, i nomi e i valori dei claim differiscono. Consulta Se i tuoi token sono v1.0 prima di continuare.
Configurare Anthropic
Nella Claude Console, apri Settings → Workload identity, fai clic su Connect workload e seleziona il riquadro Microsoft Entra. La procedura guidata ti accompagna nella registrazione dell'issuer, nella creazione di un service account e nella creazione di una regola di federazione.
La procedura guidata crea queste risorse per te. Usa i seguenti valori sia che tu li inserisca nella procedura guidata sia che li invii all'Admin API:
Issuer di federazione: Scegli v2.0 (login.microsoftonline.com) nel selettore Token issuer della procedura guidata. (Il selettore ha come valore predefinito v1; quel valore predefinito esiste per i tenant che riutilizzano registrazioni più vecchie che emettono ancora token v1.0.) Entra pubblica un documento di discovery OIDC all'URL dell'issuer per tenant, quindi usa la modalità discovery. Ogni tenant Microsoft Entra che federi necessita del proprio record issuer.
{
"name": "azure-prod-tenant",
"issuer_url": "https://login.microsoftonline.com/<TENANT_ID>/v2.0",
"jwks": { "type": "discovery" },
"max_jwt_lifetime_seconds": 86400
}Una durata accettata più lunga significa che un token Entra trapelato rimane scambiabile per più tempo. Se un token trapela, la leva è disabilitare la regola di federazione; una corrispondenza oid stretta limita in primo luogo quali identità possono scambiare un token, come descritto in Delimitare la regola.
Regola di federazione: Effettua la corrispondenza sull'object ID dell'identità gestita e sull'ID del tuo tenant. Per i token v2.0 che questa guida configura, il valore audience è il client ID della app registration dell'audience (il GUID <APP_ID> da Registrare l'audience del token). Usa il valore aud esatto dal tuo token decodificato.
{
"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 è la durata del token di accesso Anthropic restituito dallo scambio, non del token Entra; l'SDK lo rinnova per te.
Acquisire e usare il token
A runtime il tuo carico di lavoro recupera il proprio token Entra, lo scambia presso POST /v1/oauth/token e usa il bearer token restituito per chiamare Claude. Ogni SDK Anthropic gestisce lo scambio e il ciclo di rinnovo quando fornisci un callable token-provider, come mostrato negli esempi seguenti. La scheda cURL mostra il flusso grezzo.
Gli esempi recuperano il token dell'identità gestita dall'endpoint token della piattaforma: IMDS su VM e VM Scale Set, oppure il servizio IDENTITY_ENDPOINT su App Service, Functions e Container Apps. Sostituisci <APP_ID> nel valore resource api://<APP_ID> con il client ID della app registration dell'audience da Registrare l'audience del token.
import os
import anthropic
import requests
from anthropic import WorkloadIdentityCredentials
# URI identificatore della registrazione dell'app audience (vedi Registrare l'audience del token).
AUDIENCE = "api://<APP_ID>"
def fetch_entra_token() -> str:
"""Fetch a managed identity token from the platform's token endpoint."""
# Con più identità assegnate dall'utente, aggiungi client_id=<IDENTITY_CLIENT_ID>
# ai parametri della richiesta per selezionarne 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"))Verificare la configurazione
Dalla tua risorsa Azure, esegui lo scambio cURL mostrato in Acquisire e usare il token e conferma che POST /v1/oauth/token restituisca un 200 con un access_token che inizia con sk-ant-oat01- e un valore expires_in in secondi. Se lo scambio fallisce con la risposta opaca 401 authentication_error (messaggio Authentication failed), controlla la pagina della cronologia di autenticazione per il motivo del rifiuto, quindi decodifica il token Entra (consulta Risolvere i problemi di uno scambio fallito per il comando) e verifica le cause più comuni lato Azure:
- Issuer non corrispondente: L'
issuer_urlregistrato deve corrispondere esattamente al claimissdel token. Un token v2.0 contienehttps://login.microsoftonline.com/<TENANT_ID>/v2.0; se il claimverdecodificato è1.0, consulta Se i tuoi token sono v1.0. - Durata del token: I token di identità gestita contengono fino a 24 ore tra
iatedexp. Se l'issuer ha ancora il7500della procedura guidata (o il valore predefinito di 1 ora), aumentamax_jwt_lifetime_secondsa86400come descritto in Configurare Anthropic. - Audience non corrispondente: L'
audiencedella regola deve essere esattamente uguale all'auddel token: il client ID della app registration dell'audience per i token v2.0 che questa guida configura. - Nome del claim non corrispondente: Una regola che effettua la corrispondenza su un claim che il token non contiene non passa mai. I token v1.0 contengono il client ID in
appid, non inazp; consulta Se i tuoi token sono v1.0.
Usare Entra Workload Identity su AKS
Usa questo percorso quando il tuo carico di lavoro viene eseguito in un pod AKS. Entra Workload Identity federa un service account Kubernetes con un'identità gestita assegnata dall'utente: Kubernetes proietta un token del service account (firmato dall'issuer OIDC del cluster AKS) nel pod al percorso indicato in AZURE_FEDERATED_TOKEN_FILE. Quel token proiettato non è un token emesso da Entra, quindi per rimanere sul percorso mediato da Entra descritto in questa pagina, il carico di lavoro esegue uno scambio in due passaggi: prima riscatta il token proiettato presso https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/token (grant client_credentials federato) per un token di accesso emesso da Entra, poi passa quel token Entra all'SDK Anthropic come identity token.
Configurare Entra Workload Identity
Abilita l'issuer OIDC e workload identity sul tuo cluster
L'abilitazione di workload identity installa per te il mutating webhook
azure-workload-identity; distribuiscilo manualmente solo su cluster non AKS. Acquisisci l'URL dell'issuer OIDC del cluster per la credenziale federata che crei in un passaggio successivo.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 un'identità gestita assegnata dall'utente
Acquisisci due valori dall'identità: il Client ID va nell'annotazione del service account (e viene iniettato nel pod come
AZURE_CLIENT_ID), e l'Object (principal) ID appare come claimoidsu cui la tua regola di federazione Anthropic effettua la corrispondenza.az identity create \ --resource-group <RESOURCE_GROUP> \ --name claude-inference-identity \ --location <LOCATION> # Va nell'annotazione del service account; iniettato nel pod come AZURE_CLIENT_ID. IDENTITY_CLIENT_ID=$(az identity show \ --resource-group <RESOURCE_GROUP> \ --name claude-inference-identity \ --query clientId -o tsv) # Appare come claim oid a cui corrisponde la tua regola di federazione. IDENTITY_OBJECT_ID=$(az identity show \ --resource-group <RESOURCE_GROUP> \ --name claude-inference-identity \ --query principalId -o tsv)Crea il service account Kubernetes annotato
Il webhook
azure-workload-identitylegge l'annotazioneazure.workload.identity/client-idper iniettareAZURE_CLIENT_IDnel pod, che gli esempi in Acquisire e usare il token leggono dall'ambiente.apiVersion: v1 kind: ServiceAccount metadata: name: claude-inference namespace: inference annotations: azure.workload.identity/client-id: <IDENTITY_CLIENT_ID>Crea la credenziale federata sull'identità gestita
La credenziale federata considera attendibile l'issuer OIDC del tuo cluster per quello specifico service account. Il valore
--audience api://AzureADTokenExchangeè l'audience fissa di Entra per i token del service account Kubernetes in ingresso; non ha relazione con l'audience della Claude API che hai registrato in precedenza.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://AzureADTokenExchangeEtichetta il pod e imposta il suo service account
Il pod deve avere l'etichetta
azure.workload.identity/use: "true"ed essere eseguito come il service account annotato. Il webhook inietta quindiAZURE_FEDERATED_TOKEN_FILE,AZURE_CLIENT_IDeAZURE_TENANT_IDnel pod. Il file inAZURE_FEDERATED_TOKEN_FILEcontiene il token del service account proiettato da Kubernetes, firmato dall'issuer OIDC del cluster 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 di esempio
Il token che la tua regola di federazione Anthropic vede non è il file proiettato; è il token emesso da Entra restituito dallo scambio
client_credentials. Dall'interno di un pod etichettato, esegui il passaggio 1 dell'esempio cURL in Acquisire e usare il token e decodifica il risultato. Contiene la stessa struttura di claim del percorso con identità gestita:{ "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 }subeoidsono l'object ID dell'identità gestita,audè il client ID della app registration dell'audience eazpè il client ID dell'identità gestita (il valore diAZURE_CLIENT_ID). La durata differisce dal percorso con identità gestita: i tokenclient_credentialshanno come valore predefinito una finestra casuale da 60 a 90 minuti traiatedexp, non 24 ore.
Configurare Anthropic
Nella Claude Console, apri Settings → Workload identity, fai clic su Connect workload e seleziona il riquadro Microsoft Entra. La procedura guidata ti accompagna nella registrazione dell'issuer, nella creazione di un service account e nella creazione di una regola di federazione.
La procedura guidata crea queste risorse per te. Usa i seguenti valori sia che tu li inserisca nella procedura guidata sia che li invii all'Admin API:
Issuer di federazione: Scegli v2.0 (login.microsoftonline.com) nel selettore Token issuer della procedura guidata. (Il selettore ha come valore predefinito v1; quel valore predefinito esiste per i tenant che riutilizzano registrazioni più vecchie che emettono ancora token v1.0.) Entra pubblica un documento di discovery OIDC all'URL dell'issuer per tenant, quindi usa la modalità discovery. Ogni tenant Microsoft Entra che federi necessita del proprio record issuer.
{
"name": "azure-prod-tenant",
"issuer_url": "https://login.microsoftonline.com/<TENANT_ID>/v2.0",
"jwks": { "type": "discovery" },
"max_jwt_lifetime_seconds": 7500
}Una durata accettata più lunga significa che un token Entra trapelato rimane scambiabile per più tempo. Se un token trapela, la leva è disabilitare la regola di federazione; una corrispondenza oid stretta limita in primo luogo quali identità possono scambiare un token, come descritto in Delimitare la regola.
Regola di federazione: Effettua la corrispondenza sull'object ID dell'identità gestita e sull'ID del tuo tenant. Per i token v2.0 che questa guida configura, il valore audience è il client ID della app registration dell'audience (il GUID <APP_ID> da Registrare l'audience del token). Usa il valore aud esatto dal tuo token decodificato.
{
"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 è la durata del token di accesso Anthropic restituito dallo scambio, non del token Entra; l'SDK lo rinnova per te.
Acquisire e usare il token
A runtime il pod esegue lo scambio in due passaggi: invia il token proiettato da Kubernetes (il file in AZURE_FEDERATED_TOKEN_FILE) all'endpoint token di Entra come asserzione client_credentials federata, quindi scambia il token di accesso Entra risultante presso POST /v1/oauth/token. Ogni SDK Anthropic gestisce il secondo scambio e il ciclo di rinnovo quando fornisci il recupero Entra come callable token-provider, come mostrato negli esempi seguenti. La scheda cURL mostra il flusso grezzo.
Negli esempi compaiono due client ID diversi. <APP_ID> è il client ID della app registration dell'audience da Registrare l'audience del token; lo scope api://<APP_ID>/.default chiede a Entra un token indirizzato a quell'audience. $AZURE_CLIENT_ID è il client ID dell'identità gestita, iniettato dal webhook, e identifica il chiamante. Non sostituire l'uno con l'altro.
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"))Verificare la configurazione
Dall'interno di un pod etichettato, esegui lo scambio cURL mostrato in Acquisire e usare il token e conferma che POST /v1/oauth/token restituisca un 200 con un access_token che inizia con sk-ant-oat01- e un valore expires_in in secondi. Se lo scambio fallisce con la risposta opaca 401 authentication_error (messaggio Authentication failed), controlla la pagina della cronologia di autenticazione per il motivo del rifiuto, quindi decodifica il token emesso da Entra dal passaggio 1 (consulta Risolvere i problemi di uno scambio fallito per il comando) e verifica le cause più comuni lato Azure:
- Issuer non corrispondente: L'
issuer_urlregistrato deve corrispondere esattamente al claimissdel token. Un token v2.0 contienehttps://login.microsoftonline.com/<TENANT_ID>/v2.0; se il claimverdecodificato è1.0, consulta Se i tuoi token sono v1.0. - Durata del token: Se una policy di durata dei token del tenant o la CAE estende il token
client_credentialsoltre 7500 secondi, aumenta ilmax_jwt_lifetime_secondsdell'issuer come descritto in Configurare Anthropic. - Audience non corrispondente: L'
audiencedella regola deve essere esattamente uguale all'auddel token: il client ID della app registration dell'audience per i token v2.0 che questa guida configura. - Nome del claim non corrispondente: Una regola che effettua la corrispondenza su un claim che il token non contiene non passa mai. I token v1.0 contengono il client ID in
appid, non inazp; consulta Se i tuoi token sono v1.0.
Se i tuoi token sono v1.0
Questa guida configura la app registration dell'audience con api.requestedAccessTokenVersion: 2, quindi ogni token che mostra è v2.0. Se riutilizzi una registrazione esistente che lascia requestedAccessTokenVersion non impostato, Entra emette invece token v1.0. Decodifica un token di esempio e controlla il suo claim ver; se è 1.0, cambiano quattro cose:
- Issuer: Il claim
issèhttps://sts.windows.net/<TENANT_ID>/invece dihttps://login.microsoftonline.com/<TENANT_ID>/v2.0. Registra l'URL dell'issuer esattamente come lo riporta il claimissdel tuo token. I due URL condividono lo stesso JWKS, quindi la modalità discovery funziona per entrambi. - Selettore della procedura guidata: Scegli v1 (sts.windows.net) nel selettore Token issuer della procedura guidata Connect workload invece di v2.0 (login.microsoftonline.com).
- Audience: Il claim
audè l'identifier URI che hai passato comeresource(ad esempio,api://<APP_ID>), non il client ID della registrazione. Imposta l'audiencedella regola di federazione al valoreaudesatto dal tuo token decodificato. - Claim del client ID: Il client ID dell'identità chiamante appare in
appid, non inazp. I due claim non appaiono mai nello stesso token, quindi una regola che effettua la corrispondenza suazpnon passa mai con un token v1.0.
I claim oid, sub e tid contengono gli stessi valori in entrambe le versioni, quindi il resto di questa guida si applica senza modifiche.
Delimitare la regola
Una regola di federazione può effettuare la corrispondenza sul subject del token con subject_prefix in aggiunta (o in alternativa) alla mappa claims; consulta Semantica di corrispondenza delle regole per come i campi si combinano. I valori sub di Entra per queste identità sono GUID canonici a lunghezza fissa, quindi un subject_prefix contenente l'intero object ID di 36 caratteri corrisponde solo a quel subject; questa è una proprietà del formato del subject di Entra, non di subject_prefix in generale.
Vincola il blocco match della regola all'ambito più ristretto adatto al tuo caso d'uso:
- Effettua la corrispondenza su
oidcome valore esatto: Impostaclaims.oidall'intero object ID dell'identità gestita. Unsubject_prefiximpostato a quell'intero object ID è equivalente (la procedura guidata della Console imposta entrambi); non usare mai unsubject_prefixcon wildcard o GUID parziale, che corrisponde a più identità di quelle che intendi. - Vincola
tidcome difesa in profondità: L'URL dell'issuer vincola già il tuo tenant, ma aggiungereclaims.tidprotegge dalla deriva della configurazione se il record issuer viene modificato in seguito. - Vincola l'audience: Imposta
audienceal valoreaudesatto dal tuo token decodificato in modo che i token emessi per altre applicazioni vengano rifiutati. - Usa una regola separata per ogni identità gestita: Crea una regola per ogni identità anziché una regola che ne autorizzi diverse, in modo da poter revocare l'accesso di un singolo carico di lavoro senza influire sugli altri.
Passaggi successivi
- Esamina il modello di configurazione completo in Workload Identity Federation.
- Consulta le guide dei provider per AWS, Google Cloud, GitHub Actions e Kubernetes.
- Per variabili d'ambiente, file di profilo e precedenza delle credenziali, consulta il riferimento WIF.
Was this page helpful?