As cargas de trabalho do Azure se autenticam na API do Claude apresentando um "JSON Web Token" (token web JSON), ou JWT, emitido pelo Microsoft Entra ID, e depois trocando-o por um token de acesso Anthropic de curta duração. A configuração segue o mesmo formato em todas as plataformas Azure:
POST /v1/oauth/token por um token de acesso Anthropic sk-ant-oat01-... e chama Claude com ele.Em ambos os caminhos, o token que você apresenta à Anthropic carrega o emissor Entra específico do seu tenant e o ID de objeto da identidade gerenciada nas claims sub e oid; apenas a forma como a carga de trabalho obtém esse token difere. Escolha a seção correspondente a onde sua carga de trabalho é executada: Use uma identidade gerenciada para VMs, VM Scale Sets, App Service, Functions ou Container Apps; Use o Entra Workload Identity no AKS para AKS.
O Microsoft Entra ID só emite um token quando a audiência solicitada existe no seu tenant como um registro de aplicativo com um service principal. Crie um registro de aplicativo para representar a audiência da API do Claude; toda carga de trabalho no tenant pode solicitar tokens para ele. Sem esse registro, as solicitações de token falham com um erro "resource not found in tenant" (AADSTS50001 dos endpoints de identidade gerenciada, AADSTS500011 do endpoint de token do Entra).
# Crie o registro de aplicativo que representa o público (audience) da API do Claude.
APP_ID=$(az ad app create --display-name claude-api-federation --query appId -o tsv)
# Solicite tokens de acesso v2.0 e defina o URI identificador api://<APP_ID>.
az ad app update --id "$APP_ID" \
--identifier-uris "api://$APP_ID" \
--set api.requestedAccessTokenVersion=2
# Crie o service principal para que o público (audience) seja resolvido no seu tenant.
az ad sp create --id "$APP_ID"Use o formato de URI identificador api://<APP_ID>. O Entra restringe URIs identificadores https:// a domínios verificados do seu próprio tenant, portanto um URI como https://api.anthropic.com não pode ser registrado na maioria dos tenants; api://<APP_ID> é aceito em todos os lugares. Com requestedAccessTokenVersion: 2, os tokens para essa audiência são v2.0, que é o que este guia assume. Se você reutilizar um registro existente que emite tokens v1.0, consulte Se seus tokens forem v1.0.
Use este caminho quando sua carga de trabalho é executada em uma VM, um VM Scale Set, App Service, Functions ou Container Apps. A carga de trabalho solicita um JWT emitido pelo Entra para sua identidade gerenciada atribuída a partir do endpoint de token local da plataforma e, em seguida, troca esse JWT com a Anthropic.
Anexe uma identidade gerenciada
Habilite uma identidade gerenciada atribuída pelo sistema ou atribuída pelo usuário no seu recurso do Azure. No portal do Azure, abra o recurso, vá para Identity e ative System assigned (ou anexe uma identidade atribuída pelo usuário).
Depois que a identidade for criada, anote seu Object (principal) ID. Esse GUID aparece como as claims sub e oid no token emitido, e sua regra de federação da Anthropic fará a correspondência com ele. Você pode encontrá-lo na página Identity do recurso; para uma identidade atribuída pelo usuário, é o Object (principal) ID na página Overview do recurso de identidade gerenciada. (Uma identidade gerenciada tem apenas um service principal no Microsoft Entra ID, não um registro de aplicativo.)
Encontre o endpoint de token da plataforma
A plataforma expõe um endpoint de token local assim que a identidade é anexada:
http://169.254.169.254/metadata/identity/oauth2/token com o cabeçalho Metadata: true e api-version=2018-02-01.IDENTITY_ENDPOINT com o cabeçalho X-IDENTITY-HEADER definido com o valor de IDENTITY_HEADER, e api-version=2019-08-01. O IMDS não é acessível nessas plataformas.Se o recurso tiver mais de uma identidade gerenciada atribuída pelo usuário, adicione client_id=<IDENTITY_CLIENT_ID> à solicitação de token para selecionar uma. O Azure recomenda sempre especificá-lo. Sem ele, o resultado depende de o recurso também ter uma identidade atribuída pelo sistema habilitada: se tiver, a solicitação silenciosamente recorre a essa identidade e então falha na correspondência de oid da sua regra de federação; se não tiver, a solicitação falha imediatamente assim que uma segunda identidade atribuída pelo usuário é anexada.
Decodifique um token de exemplo
Solicite um token do endpoint e decodifique seu payload para confirmar as claims que sua regra de federação precisa corresponder. (Para o comando de decodificação, consulte Solucionar problemas de uma troca com falha.) Um token v2.0 para uma identidade gerenciada carrega estas 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 | Faça a correspondência quando |
|---|---|---|
oid | O ID de objeto da identidade gerenciada, idêntico a sub | Você quer autorizar uma identidade gerenciada específica. Este é o padrão; a regra em Configure a Anthropic faz a correspondência com ele. |
azp | O client ID da identidade chamadora | Você quer autorizar todas as cargas de trabalho que compartilham um registro de aplicativo. Para uma identidade gerenciada, azp é exclusivo dessa identidade, portanto é equivalente a oid. |
aud | O client ID do registro de aplicativo da audiência (o GUID <APP_ID> de Registre a audiência do token) | Sempre. O campo audience da regra deve ser exatamente igual ao valor aud do token. |
tid | O ID do seu tenant | Você quer defesa em profundidade. A URL do emissor já fixa o tenant. |
Se a claim ver do token decodificado for 1.0, os nomes e valores das claims diferem. Consulte Se seus tokens forem v1.0 antes de continuar.
No Claude Console, abra Settings → Workload identity, clique em Connect workload e selecione o bloco Microsoft Entra. O assistente orienta você no registro do emissor, na criação de uma conta de serviço e na criação de uma regra de federação.
O assistente cria esses recursos para você. Use os seguintes valores, seja inserindo-os no assistente ou enviando-os para a Admin API:
Emissor de federação: Escolha v2.0 (login.microsoftonline.com) no seletor Token issuer do assistente. (O seletor tem v1 como padrão; esse padrão existe para tenants que reutilizam registros mais antigos que ainda emitem tokens v1.0.) O Entra publica um documento de descoberta OIDC na URL do emissor por tenant, portanto use o modo de descoberta. Cada tenant do Microsoft Entra que você federar precisa de seu próprio registro de emissor.
{
"name": "azure-prod-tenant",
"issuer_url": "https://login.microsoftonline.com/<TENANT_ID>/v2.0",
"jwks": { "type": "discovery" },
"max_jwt_lifetime_seconds": 86400
}Cargas de trabalho com identidade gerenciada precisam de max_jwt_lifetime_seconds: 86400. O Azure emite tokens de identidade gerenciada com até 24 horas entre iat e exp porque armazena em cache o token de cada recurso durante essa janela e não oferece nenhuma forma de forçar uma atualização antecipada, e o padrão de 1 hora do emissor rejeita esses tokens com invalid_grant. O bloco Microsoft Entra do assistente Connect workload cria o emissor com max_jwt_lifetime_seconds definido como 7500 e não fornece nenhum campo para alterá-lo durante a criação, portanto conclua o assistente, depois abra Settings → Workload identity → Issuers, edite o emissor e aumente o valor para 86400. Você também pode atualizar o emissor por meio da Admin API.
Um tempo de vida aceito mais longo significa que um token do Entra vazado permanece trocável por mais tempo. Se um token vazar, a alavanca é desabilitar a regra de federação; uma correspondência estrita de oid limita quais identidades podem trocar um token em primeiro lugar, conforme descrito em Delimite o escopo da sua regra.
Regra de federação: Faça a correspondência com o ID de objeto da identidade gerenciada e o ID do seu tenant. Para os tokens v2.0 que este guia configura, o valor de audience é o client ID do registro de aplicativo da audiência (o GUID <APP_ID> de Registre a audiência do token). Use o valor exato de aud do seu 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 é o tempo de vida do token de acesso Anthropic que a troca retorna, não do token do Entra; o SDK o atualiza para você.
Em tempo de execução, sua carga de trabalho busca seu token do Entra, troca-o em POST /v1/oauth/token e usa o token bearer retornado para chamar Claude. Cada SDK da Anthropic lida com a troca e o ciclo de atualização quando você fornece um callable provedor de token, como mostrado nos exemplos a seguir. A aba cURL mostra o fluxo bruto.
Os exemplos buscam o token de identidade gerenciada no endpoint de token da plataforma: IMDS em VMs e VM Scale Sets, ou o serviço IDENTITY_ENDPOINT no App Service, Functions e Container Apps. Substitua <APP_ID> no valor de recurso api://<APP_ID> pelo client ID do registro de aplicativo da audiência de Registre a audiência do token.
Se sua carga de trabalho já usa a biblioteca cliente Azure Identity, passe sua aquisição de token (DefaultAzureCredential com o escopo api://<APP_ID>/.default) como o provedor de token de identidade em vez de chamar os endpoints de token diretamente. A biblioteca seleciona o endpoint correto em todas as plataformas Azure, incluindo AKS com Entra Workload Identity.
import os
import anthropic
import requests
from anthropic import WorkloadIdentityCredentials
# O URI identificador do registro de aplicativo da audiência (consulte Registrar a audiência do token).
AUDIENCE = "api://<APP_ID>"
def fetch_entra_token() -> str:
"""Fetch a managed identity token from the platform's token endpoint."""
# Com várias identidades atribuídas pelo usuário, adicione client_id=<IDENTITY_CLIENT_ID>
# aos parâmetros da requisição para selecionar uma.
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 ou 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"))A partir do seu recurso do Azure, execute a troca cURL mostrada em Adquira e use o token e confirme que POST /v1/oauth/token retorna um 200 com um access_token começando com sk-ant-oat01- e um valor expires_in em segundos. Em caso de 400 invalid_grant, decodifique o token do Entra (consulte Solucionar problemas de uma troca com falha para o comando) e verifique as causas mais comuns do lado do Azure:
issuer_url registrado deve corresponder exatamente à claim iss do token. Um token v2.0 carrega https://login.microsoftonline.com/<TENANT_ID>/v2.0; se a claim ver decodificada for 1.0, consulte Se seus tokens forem v1.0.iat e exp. Se o emissor ainda tiver o 7500 do assistente (ou o padrão de 1 hora), aumente max_jwt_lifetime_seconds para 86400 conforme descrito em Configure a Anthropic.audience da regra deve ser exatamente igual ao aud do token: o client ID do registro de aplicativo da audiência para os tokens v2.0 que este guia configura.appid, não em azp; consulte Se seus tokens forem v1.0.Use este caminho quando sua carga de trabalho é executada em um pod do AKS. O Entra Workload Identity federa uma conta de serviço do Kubernetes com uma identidade gerenciada atribuída pelo usuário: o Kubernetes projeta um token de conta de serviço (assinado pelo emissor OIDC do cluster AKS) no pod no caminho em AZURE_FEDERATED_TOKEN_FILE. Esse token projetado não é um token emitido pelo Entra, portanto, para permanecer no caminho mediado pelo Entra descrito nesta página, a carga de trabalho realiza uma troca em dois saltos: primeiro ela resgata o token projetado em https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/token (concessão client_credentials federada) por um token de acesso emitido pelo Entra, depois passa esse token do Entra para o SDK da Anthropic como o token de identidade.
Pods do AKS podem, alternativamente, pular a troca do Entra e apresentar o token de conta de serviço projetado pelo Kubernetes diretamente à Anthropic. Esse caminho registra o emissor OIDC do seu cluster AKS na Anthropic em vez do seu tenant do Entra. Consulte Use WIF com Kubernetes para esse fluxo.
Habilite o emissor OIDC e a workload identity no seu cluster
Habilitar a workload identity instala o webhook de mutação azure-workload-identity para você; implante-o manualmente apenas em clusters não AKS. Capture a URL do emissor OIDC do cluster para a credencial federada que você criará em uma etapa 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)Crie uma identidade gerenciada atribuída pelo usuário
Capture dois valores da identidade: o Client ID vai para a anotação da conta de serviço (e é injetado no pod como AZURE_CLIENT_ID), e o Object (principal) ID aparece como a claim oid com a qual sua regra de federação da Anthropic faz a correspondência.
az identity create \
--resource-group <RESOURCE_GROUP> \
--name claude-inference-identity \
--location <LOCATION>
# Vai na anotação da service account; injetado no 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 a claim oid que sua regra de federação corresponde.
IDENTITY_OBJECT_ID=$(az identity show \
--resource-group <RESOURCE_GROUP> \
--name claude-inference-identity \
--query principalId -o tsv)Crie a conta de serviço do Kubernetes anotada
O webhook azure-workload-identity lê a anotação azure.workload.identity/client-id para injetar AZURE_CLIENT_ID no pod, que os exemplos em Adquira e use o token leem do ambiente.
apiVersion: v1
kind: ServiceAccount
metadata:
name: claude-inference
namespace: inference
annotations:
azure.workload.identity/client-id: <IDENTITY_CLIENT_ID>Crie a credencial federada na identidade gerenciada
A credencial federada confia no emissor OIDC do seu cluster para aquela conta de serviço específica. O valor --audience api://AzureADTokenExchange é a audiência fixa do Entra para tokens de conta de serviço do Kubernetes recebidos; não tem relação com a audiência da API do Claude que você registrou 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://AzureADTokenExchangeRotule o pod e defina sua conta de serviço
O pod deve carregar o rótulo azure.workload.identity/use: "true" e ser executado como a conta de serviço anotada. O webhook então injeta AZURE_FEDERATED_TOKEN_FILE, AZURE_CLIENT_ID e AZURE_TENANT_ID no pod. O arquivo em AZURE_FEDERATED_TOKEN_FILE contém o token de conta de serviço projetado pelo Kubernetes, assinado pelo emissor OIDC do 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:latestDecodifique um token de exemplo
O token que sua regra de federação da Anthropic vê não é o arquivo projetado; é o token emitido pelo Entra retornado pela troca client_credentials. De dentro de um pod rotulado, execute a etapa 1 do exemplo cURL em Adquira e use o token e decodifique o resultado. Ele carrega o mesmo formato de claims do caminho de identidade gerenciada:
{
"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 são o ID de objeto da identidade gerenciada, aud é o client ID do registro de aplicativo da audiência, e azp é o client ID da identidade gerenciada (o valor de AZURE_CLIENT_ID). O tempo de vida difere do caminho de identidade gerenciada: tokens client_credentials têm por padrão uma janela aleatória de 60 a 90 minutos entre iat e exp, não 24 horas.
No Claude Console, abra Settings → Workload identity, clique em Connect workload e selecione o bloco Microsoft Entra. O assistente orienta você no registro do emissor, na criação de uma conta de serviço e na criação de uma regra de federação.
O assistente cria esses recursos para você. Use os seguintes valores, seja inserindo-os no assistente ou enviando-os para a Admin API:
Emissor de federação: Escolha v2.0 (login.microsoftonline.com) no seletor Token issuer do assistente. (O seletor tem v1 como padrão; esse padrão existe para tenants que reutilizam registros mais antigos que ainda emitem tokens v1.0.) O Entra publica um documento de descoberta OIDC na URL do emissor por tenant, portanto use o modo de descoberta. Cada tenant do Microsoft Entra que você federar precisa de seu próprio registro de emissor.
{
"name": "azure-prod-tenant",
"issuer_url": "https://login.microsoftonline.com/<TENANT_ID>/v2.0",
"jwks": { "type": "discovery" },
"max_jwt_lifetime_seconds": 7500
}O bloco Microsoft Entra do assistente Connect workload cria o emissor com max_jwt_lifetime_seconds definido como 7500 (pouco mais de 2 horas), o que cobre o tempo de vida padrão de 60 a 90 minutos dos tokens client_credentials. Uma política de tempo de vida de token do tenant ou o Continuous Access Evaluation (CAE) pode estender esse tempo de vida. Se o exp menos iat do seu token decodificado exceder 7500 segundos, edite o emissor em Settings → Workload identity → Issuers e aumente max_jwt_lifetime_seconds para corresponder, ou as trocas falharão com invalid_grant. Se seu tenant também executa cargas de trabalho com identidade gerenciada de Use uma identidade gerenciada, use o valor 86400 daquela seção, que cobre ambos os caminhos.
Um tempo de vida aceito mais longo significa que um token do Entra vazado permanece trocável por mais tempo. Se um token vazar, a alavanca é desabilitar a regra de federação; uma correspondência estrita de oid limita quais identidades podem trocar um token em primeiro lugar, conforme descrito em Delimite o escopo da sua regra.
Regra de federação: Faça a correspondência com o ID de objeto da identidade gerenciada e o ID do seu tenant. Para os tokens v2.0 que este guia configura, o valor de audience é o client ID do registro de aplicativo da audiência (o GUID <APP_ID> de Registre a audiência do token). Use o valor exato de aud do seu 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 é o tempo de vida do token de acesso Anthropic que a troca retorna, não do token do Entra; o SDK o atualiza para você.
Em tempo de execução, o pod realiza a troca em dois saltos: ele envia o token projetado pelo Kubernetes (o arquivo em AZURE_FEDERATED_TOKEN_FILE) para o endpoint de token do Entra como uma asserção client_credentials federada, depois troca o token de acesso do Entra resultante em POST /v1/oauth/token. Cada SDK da Anthropic lida com a segunda troca e o ciclo de atualização quando você fornece a busca do Entra como um callable provedor de token, como mostrado nos exemplos a seguir. A aba cURL mostra o fluxo bruto.
Dois client IDs diferentes aparecem nos exemplos. <APP_ID> é o client ID do registro de aplicativo da audiência de Registre a audiência do token; o escopo api://<APP_ID>/.default pede ao Entra um token endereçado a essa audiência. $AZURE_CLIENT_ID é o client ID da identidade gerenciada, injetado pelo webhook, e identifica o chamador. Não substitua um pelo outro.
Se sua carga de trabalho já usa a biblioteca cliente Azure Identity, passe sua aquisição de token (DefaultAzureCredential com o escopo api://<APP_ID>/.default) como o provedor de token de identidade em vez de realizar a troca em dois saltos você mesmo. A biblioteca lê as mesmas variáveis de ambiente AZURE_FEDERATED_TOKEN_FILE, AZURE_CLIENT_ID e AZURE_TENANT_ID e lida com a troca do 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"))De dentro de um pod rotulado, execute a troca cURL mostrada em Adquira e use o token e confirme que POST /v1/oauth/token retorna um 200 com um access_token começando com sk-ant-oat01- e um valor expires_in em segundos. Em caso de 400 invalid_grant, decodifique o token emitido pelo Entra da etapa 1 (consulte Solucionar problemas de uma troca com falha para o comando) e verifique as causas mais comuns do lado do Azure:
issuer_url registrado deve corresponder exatamente à claim iss do token. Um token v2.0 carrega https://login.microsoftonline.com/<TENANT_ID>/v2.0; se a claim ver decodificada for 1.0, consulte Se seus tokens forem v1.0.client_credentials além de 7500 segundos, aumente o max_jwt_lifetime_seconds do emissor conforme descrito em Configure a Anthropic.audience da regra deve ser exatamente igual ao aud do token: o client ID do registro de aplicativo da audiência para os tokens v2.0 que este guia configura.appid, não em azp; consulte Se seus tokens forem v1.0.Este guia configura o registro de aplicativo da audiência com api.requestedAccessTokenVersion: 2, portanto todos os tokens que ele mostra são v2.0. Se você reutilizar um registro existente que deixa requestedAccessTokenVersion não definido, o Entra emite tokens v1.0 em vez disso. Decodifique um token de exemplo e verifique sua claim ver; se for 1.0, quatro coisas mudam:
iss é https://sts.windows.net/<TENANT_ID>/ em vez de https://login.microsoftonline.com/<TENANT_ID>/v2.0. Registre a URL do emissor exatamente como a claim iss do seu token a carrega. As duas URLs compartilham o mesmo JWKS, portanto o modo de descoberta funciona para qualquer uma.aud é o URI identificador que você passou como resource (por exemplo, api://<APP_ID>), não o client ID do registro. Defina o audience da regra de federação com o valor exato de aud do seu token decodificado.appid, não em azp. As duas claims nunca aparecem no mesmo token, portanto uma regra que faz correspondência com azp nunca passa contra um token v1.0.As claims oid, sub e tid carregam os mesmos valores em ambas as versões, portanto o restante deste guia se aplica sem alterações.
Uma regra de federação pode corresponder ao subject do token com subject_prefix além do (ou em vez do) mapa claims; consulte Semântica de correspondência de regras para saber como os campos se combinam. Os valores de sub do Entra para essas identidades são GUIDs canônicos de comprimento fixo, portanto um subject_prefix contendo o ID de objeto completo de 36 caracteres corresponde apenas a esse subject; essa é uma propriedade do formato de subject do Entra, não de subject_prefix em geral.
Toda identidade no seu tenant pode solicitar um token para a audiência registrada,
portanto audience e tid sozinhos não identificam uma carga de trabalho específica. Uma regra que
omite uma correspondência de oid (ou azp/appid), ou que usa um subject_prefix curinga ou
com GUID parcial, autoriza toda identidade gerenciada e service
principal no tenant.
Restrinja o bloco match da regra ao escopo mais estreito que se adequa ao seu caso de uso:
oid como um valor exato: Defina claims.oid com o ID de objeto completo da identidade gerenciada. Um subject_prefix definido com esse ID de objeto completo é equivalente (o assistente do Console define ambos); nunca use um subject_prefix curinga ou com GUID parcial, que corresponde a mais identidades do que você pretende.tid como defesa em profundidade: A URL do emissor já fixa seu tenant, mas adicionar claims.tid protege contra desvios de configuração se o registro do emissor for editado posteriormente.audience com o valor exato de aud do seu token decodificado para que tokens emitidos para outros aplicativos sejam rejeitados.Was this page helpful?