I carichi di lavoro Azure si autenticano alla Claude API presentando un JSON Web Token (JWT) emesso da Microsoft Entra ID, per poi scambiarlo con un token di accesso Anthropic di breve durata. La configurazione segue la stessa struttura su ogni piattaforma Azure:
POST /v1/oauth/token con un token di accesso Anthropic sk-ant-oat01-... e lo usa per chiamare Claude.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; differisce solo il modo in cui il carico di lavoro ottiene quel token. Scegli la sezione in base a dove viene eseguito il tuo carico di lavoro: Usa un'identità gestita per VM, VM Scale Set, App Service, Functions o Container Apps; Usa Entra Workload Identity su AKS per AKS.
Microsoft Entra ID emette un token solo quando l'audience richiesta esiste nel tuo tenant come registrazione dell'app con un service principal. Crea una registrazione dell'app 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 dei token di Entra).
# Crea la registrazione dell'app che rappresenta l'audience dell'API Claude.
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 in modo che l'audience venga risolta nel tuo tenant.
az ad sp create --id "$APP_ID"Usa il formato di URI identificatore api://<APP_ID>. Entra limita gli URI identificatori https:// ai domini verificati del tuo tenant, quindi un URI come https://api.anthropic.com non può essere registrato nella maggior parte dei tenant; api://<APP_ID> è accettato ovunque. Con requestedAccessTokenVersion: 2, i token per questa audience sono v2.0, che è ciò che questa guida presuppone. Se riutilizzi una registrazione esistente che emette token v1.0, consulta Se i tuoi token sono v1.0.
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 sua identità gestita assegnata dall'endpoint locale dei token della piattaforma, quindi scambia quel JWT con Anthropic.
Collega un'identità gestita
Abilita un'identità gestita assegnata dal sistema o assegnata dall'utente sulla tua risorsa Azure. Nel portale di 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 nel claim sub sia nel claim oid del token emesso, e la tua regola di federazione Anthropic farà il match su di esso. Lo trovi nella pagina Identity della risorsa; per un'identità assegnata dall'utente, è l'Object (principal) ID nella pagina Overview della risorsa dell'identità gestita. (Un'identità gestita ha solo un service principal in Microsoft Entra ID, non una registrazione dell'app.)
Trova l'endpoint dei token della piattaforma
La piattaforma espone un endpoint locale dei token una volta che l'identità è collegata:
http://169.254.169.254/metadata/identity/oauth2/token con l'header Metadata: true e api-version=2018-02-01.IDENTITY_ENDPOINT con l'header X-IDENTITY-HEADER impostato al valore di IDENTITY_HEADER, e api-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 del 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 ce l'ha, la richiesta ricade silenziosamente su quell'identità e poi fallisce il match oid della tua regola di federazione; se non ce l'ha, la richiesta fallisce immediatamente non appena viene collegata una seconda identità assegnata dall'utente.
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 fare il match. (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 | Fai il match su questo quando |
|---|---|---|
oid | L'object ID dell'identità gestita, identico a sub | Vuoi autorizzare una specifica identità gestita. Questo è il comportamento predefinito; la regola in Configura Anthropic fa il match su di esso. |
azp | Il client ID dell'identità chiamante | Vuoi autorizzare ogni carico di lavoro che condivide una registrazione dell'app. Per un'identità gestita, azp è unico per quell'identità, quindi è equivalente a oid. |
aud | Il client ID della registrazione dell'app audience (il GUID <APP_ID> da Registra l'audience del token) | Sempre. Il campo audience della regola deve essere esattamente uguale al valore aud del token. |
tid | L'ID del tuo tenant | Vuoi una difesa in profondità. L'URL dell'issuer vincola già il tenant. |
Se il claim ver del token decodificato è 1.0, i nomi e i valori dei claim differiscono. Consulta Se i tuoi token sono v1.0 prima di continuare.
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 account di servizio 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 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 specifico del tenant, quindi usa la modalità discovery. Ogni tenant Microsoft Entra che federi necessita del proprio record di issuer.
{
"name": "azure-prod-tenant",
"issuer_url": "https://login.microsoftonline.com/<TENANT_ID>/v2.0",
"jwks": { "type": "discovery" },
"max_jwt_lifetime_seconds": 86400
}I carichi di lavoro con identità gestita necessitano di max_jwt_lifetime_seconds: 86400. Azure emette token di identità gestita con fino a 24 ore tra iat ed exp perché memorizza nella cache il token di ogni risorsa per quella finestra e non offre alcun modo per forzare un aggiornamento anticipato, e il valore predefinito di 1 ora dell'issuer rifiuta quei token con invalid_grant. Il riquadro Microsoft Entra della procedura guidata Connect workload crea l'issuer con max_jwt_lifetime_seconds impostato a 7500 e non fornisce alcun campo per modificarlo durante la creazione, quindi completa la procedura guidata, poi apri Settings → Workload identity → Issuers, modifica l'issuer e aumenta il valore a 86400. Puoi anche aggiornare l'issuer tramite l'Admin API.
Una durata accettata più lunga significa che un token Entra trapelato rimane scambiabile più a lungo. Se un token trapela, la leva è disabilitare la regola di federazione; un match oid stretto limita quali identità possono scambiare un token in primo luogo, come descritto in Delimita la tua regola.
Regola di federazione: Fai il match 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 registrazione dell'app audience (il GUID <APP_ID> da Registra 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 aggiorna per te.
A runtime il tuo carico di lavoro recupera il suo token Entra, lo scambia su POST /v1/oauth/token e usa il bearer token restituito per chiamare Claude. Ogni SDK Anthropic gestisce lo scambio e il ciclo di aggiornamento 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 dei 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 della risorsa api://<APP_ID> con il client ID della registrazione dell'app audience da Registra l'audience del token.
Se il tuo carico di lavoro usa già la libreria client Azure Identity, passa la sua acquisizione del token (DefaultAzureCredential con lo scope api://<APP_ID>/.default) come provider del token di identità invece di chiamare direttamente gli endpoint dei token. La libreria seleziona l'endpoint corretto su ogni piattaforma Azure, incluso AKS con Entra Workload Identity.
import os
import anthropic
import requests
from anthropic import WorkloadIdentityCredentials
# L'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"))Dalla tua risorsa Azure, esegui lo scambio cURL mostrato in Acquisisci e usa 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. In caso di 400 invalid_grant, decodifica il token Entra (consulta Risolvere i problemi di uno scambio fallito per il comando) e controlla le cause più comuni lato Azure:
issuer_url registrato deve corrispondere esattamente al claim iss del token. Un token v2.0 contiene https://login.microsoftonline.com/<TENANT_ID>/v2.0; se il claim ver decodificato è 1.0, consulta Se i tuoi token sono v1.0.iat ed exp. Se l'issuer ha ancora il valore 7500 della procedura guidata (o il valore predefinito di 1 ora), aumenta max_jwt_lifetime_seconds a 86400 come descritto in Configura Anthropic.audience della regola deve essere esattamente uguale all'aud del token: il client ID della registrazione dell'app audience per i token v2.0 che questa guida configura.appid, non in azp; consulta Se i tuoi token sono v1.0.Usa questo percorso quando il tuo carico di lavoro viene eseguito in un pod AKS. Entra Workload Identity federa un account di servizio Kubernetes con un'identità gestita assegnata dall'utente: Kubernetes proietta un token dell'account di servizio (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 a due passaggi: prima riscatta il token proiettato su 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 token di identità.
I pod AKS possono in alternativa saltare lo scambio Entra e presentare direttamente ad Anthropic il token dell'account di servizio proiettato da Kubernetes. Quel percorso registra presso Anthropic l'issuer OIDC del tuo cluster AKS invece del tuo tenant Entra. Consulta Usa WIF con Kubernetes per quel flusso.
Abilita l'issuer OIDC e la workload identity sul tuo cluster
L'abilitazione della workload identity installa per te il mutating webhook azure-workload-identity; distribuiscilo manualmente solo su cluster non AKS. Annota l'URL dell'issuer OIDC del cluster per la credenziale federata che creerai 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
Annota due valori dall'identità: il Client ID va nell'annotazione dell'account di servizio (e viene iniettato nel pod come AZURE_CLIENT_ID), e l'Object (principal) ID appare come claim oid su cui la tua regola di federazione Anthropic fa il match.
az identity create \
--resource-group <RESOURCE_GROUP> \
--name claude-inference-identity \
--location <LOCATION>
# Va nell'annotazione del service account; viene 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 il 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 l'account di servizio Kubernetes annotato
Il webhook azure-workload-identity legge l'annotazione azure.workload.identity/client-id per iniettare AZURE_CLIENT_ID nel pod, che gli esempi in Acquisisci e usa 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 account di servizio. Il valore --audience api://AzureADTokenExchange è l'audience fissa di Entra per i token degli account di servizio Kubernetes in ingresso; non è correlato all'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 account di servizio
Il pod deve avere l'etichetta azure.workload.identity/use: "true" ed essere eseguito come l'account di servizio annotato. Il webhook inietta quindi AZURE_FEDERATED_TOKEN_FILE, AZURE_CLIENT_ID e AZURE_TENANT_ID nel pod. Il file in AZURE_FEDERATED_TOKEN_FILE contiene il token dell'account di servizio 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 Acquisisci e usa il token e decodifica il risultato. Contiene la stessa struttura di claim del percorso dell'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
}sub e oid sono l'object ID dell'identità gestita, aud è il client ID della registrazione dell'app audience e azp è il client ID dell'identità gestita (il valore di AZURE_CLIENT_ID). La durata differisce dal percorso dell'identità gestita: i token client_credentials hanno per impostazione predefinita una finestra casuale da 60 a 90 minuti tra iat ed exp, non 24 ore.
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 account di servizio 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 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 specifico del tenant, quindi usa la modalità discovery. Ogni tenant Microsoft Entra che federi necessita del proprio record di issuer.
{
"name": "azure-prod-tenant",
"issuer_url": "https://login.microsoftonline.com/<TENANT_ID>/v2.0",
"jwks": { "type": "discovery" },
"max_jwt_lifetime_seconds": 7500
}Il riquadro Microsoft Entra della procedura guidata Connect workload crea l'issuer con max_jwt_lifetime_seconds impostato a 7500 (poco più di 2 ore), che copre la durata predefinita da 60 a 90 minuti dei token client_credentials. Una policy di durata dei token del tenant o la Continuous Access Evaluation (CAE) possono estendere quella durata. Se exp meno iat del tuo token decodificato supera 7500 secondi, modifica l'issuer in Settings → Workload identity → Issuers e aumenta max_jwt_lifetime_seconds di conseguenza, altrimenti gli scambi falliscono con invalid_grant. Se il tuo tenant esegue anche carichi di lavoro con identità gestita da Usa un'identità gestita, usa il valore 86400 di quella sezione, che copre entrambi i percorsi.
Una durata accettata più lunga significa che un token Entra trapelato rimane scambiabile più a lungo. Se un token trapela, la leva è disabilitare la regola di federazione; un match oid stretto limita quali identità possono scambiare un token in primo luogo, come descritto in Delimita la tua regola.
Regola di federazione: Fai il match 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 registrazione dell'app audience (il GUID <APP_ID> da Registra 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 aggiorna per te.
A runtime il pod esegue lo scambio a due passaggi: invia il token proiettato da Kubernetes (il file in AZURE_FEDERATED_TOKEN_FILE) all'endpoint dei token di Entra come asserzione client_credentials federata, poi scambia il token di accesso Entra risultante su POST /v1/oauth/token. Ogni SDK Anthropic gestisce il secondo scambio e il ciclo di aggiornamento quando fornisci il recupero da 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 registrazione dell'app audience da Registra 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.
Se il tuo carico di lavoro usa già la libreria client Azure Identity, passa la sua acquisizione del token (DefaultAzureCredential con lo scope api://<APP_ID>/.default) come provider del token di identità invece di eseguire tu stesso lo scambio a due passaggi. La libreria legge le stesse variabili d'ambiente AZURE_FEDERATED_TOKEN_FILE, AZURE_CLIENT_ID e AZURE_TENANT_ID e gestisce lo scambio con 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"))Dall'interno di un pod etichettato, esegui lo scambio cURL mostrato in Acquisisci e usa 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. In caso di 400 invalid_grant, decodifica il token emesso da Entra dal passaggio 1 (consulta Risolvere i problemi di uno scambio fallito per il comando) e controlla le cause più comuni lato Azure:
issuer_url registrato deve corrispondere esattamente al claim iss del token. Un token v2.0 contiene https://login.microsoftonline.com/<TENANT_ID>/v2.0; se il claim ver decodificato è 1.0, consulta Se i tuoi token sono v1.0.client_credentials oltre i 7500 secondi, aumenta max_jwt_lifetime_seconds dell'issuer come descritto in Configura Anthropic.audience della regola deve essere esattamente uguale all'aud del token: il client ID della registrazione dell'app audience per i token v2.0 che questa guida configura.appid, non in azp; consulta Se i tuoi token sono v1.0.Questa guida configura la registrazione dell'app 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:
iss è https://sts.windows.net/<TENANT_ID>/ invece di https://login.microsoftonline.com/<TENANT_ID>/v2.0. Registra l'URL dell'issuer esattamente come appare nel claim iss del tuo token. I due URL condividono lo stesso JWKS, quindi la modalità discovery funziona per entrambi.aud è l'URI identificatore che hai passato come resource (ad esempio, api://<APP_ID>), non il client ID della registrazione. Imposta l'audience della regola di federazione al valore aud esatto dal tuo token decodificato.appid, non in azp. I due claim non appaiono mai nello stesso token, quindi una regola che fa il match su azp non 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.
Una regola di federazione può fare il match sul subject del token con subject_prefix in aggiunta (o in alternativa) alla mappa claims; consulta Semantica del matching 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'object ID completo di 36 caratteri corrisponde solo a quel subject; questa è una proprietà del formato del subject di Entra, non di subject_prefix in generale.
Ogni identità nel tuo tenant può richiedere un token per l'audience registrata,
quindi audience e tid da soli non identificano un carico di lavoro specifico. Una regola che
omette un match su oid (o azp/appid), o che usa un subject_prefix con wildcard o
con un GUID parziale, autorizza ogni identità gestita e service
principal nel tenant.
Blocca il blocco match della regola all'ambito più ristretto adatto al tuo caso d'uso:
oid come valore esatto: Imposta claims.oid all'object ID completo dell'identità gestita. Un subject_prefix impostato a quell'object ID completo è equivalente (la procedura guidata della Console imposta entrambi); non usare mai un subject_prefix con wildcard o con un GUID parziale, che corrisponde a più identità di quelle previste.tid come difesa in profondità: L'URL dell'issuer vincola già il tuo tenant, ma aggiungere claims.tid protegge dalla deriva della configurazione se il record dell'issuer viene modificato in seguito.audience al valore aud esatto dal tuo token decodificato in modo che i token emessi per altre applicazioni vengano rifiutati.Was this page helpful?