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, em seguida, trocando-o por um token de acesso de curta duração da Anthropic. A configuração segue o mesmo formato em todas as plataformas do Azure:
POST /v1/oauth/token por um token de acesso sk-ant-oat01-... da Anthropic e chama o Claude com ele.Em ambos os caminhos, o token que você apresenta à Anthropic carrega o emissor do 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 ao local onde sua carga de trabalho é executada: Usar uma identidade gerenciada para VMs, VM Scale Sets, App Service, Functions ou Container Apps; Usar 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 uma entidade de serviço. Crie um registro de aplicativo para representar a audiência da API do Claude; todas as cargas de trabalho no tenant podem 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 a audiência 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 a entidade de serviço para que a audiência seja resolvida no seu tenant.
az ad sp create --id "$APP_ID"Use o formato de URI de identificador api://<APP_ID>. O Entra restringe URIs de identificador 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 pressupõe. 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 for 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.
Anexar 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 uma entidade de serviço no Microsoft Entra ID, não um registro de aplicativo.)
Localizar 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 como 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 recai silenciosamente para 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.
Decodificar 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 | Corresponda a isto quando |
|---|---|---|
oid | O ID de objeto da identidade gerenciada, idêntico a sub | Você quiser autorizar uma identidade gerenciada específica. Este é o padrão; a regra em Configurar a Anthropic faz a correspondência com ele. |
azp | O client ID da identidade chamadora | Você quiser 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 de audiência (o GUID <APP_ID> de Registrar a audiência do token) | Sempre. O campo audience da regra deve ser exatamente igual ao valor aud do token. |
tid | Seu ID de tenant | Você quiser 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ê pelo registro do emissor, criação de uma conta de serviço e 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ê federa 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 de 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 por 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 restrita de oid limita quais identidades podem trocar um token em primeiro lugar, conforme descrito em Definir o escopo da sua regra.
Regra de federação: Faça a correspondência com o ID de objeto da identidade gerenciada e seu ID de tenant. Para os tokens v2.0 que este guia configura, o valor de audience é o client ID do registro de aplicativo de audiência (o GUID <APP_ID> de Registrar 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 da 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 o Claude. Cada SDK da Anthropic lida com a troca e o loop de atualização quando você fornece um callable provedor de token, conforme mostrado nos exemplos a seguir. A aba cURL mostra o fluxo bruto.
Os exemplos buscam o token de identidade gerenciada do endpoint de token da plataforma: IMDS em VMs e VM Scale Sets, ou o serviço IDENTITY_ENDPOINT em App Service, Functions e Container Apps. Substitua <APP_ID> no valor de recurso api://<APP_ID> pelo client ID do registro de aplicativo de audiência de Registrar a audiência do token.
Se sua carga de trabalho já usa a biblioteca de 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 do Azure, incluindo AKS com Entra Workload Identity.
import os
import anthropic
import requests
from anthropic import WorkloadIdentityCredentials
# O URI identificador do registro de aplicativo de 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 Conjunto de Dimensionamento de VMs: 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-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello from Azure"}],
)
print(message.content[0].text)A partir do seu recurso do Azure, execute a troca cURL mostrada em Adquirir e usar 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 Configurar a Anthropic.audience da regra deve ser exatamente igual ao aud do token: o client ID do registro de aplicativo de 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 for 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 de dois saltos: primeiro resgata o token projetado em https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/token (grant client_credentials federado) 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 com a Anthropic em vez do seu tenant do Entra. Consulte Usar WIF com Kubernetes para esse fluxo.
Habilitar o emissor OIDC e o workload identity no seu cluster
Habilitar o workload identity instala o webhook de mutação azure-workload-identity para você; implante-o manualmente apenas em clusters que não sejam 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)Criar 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 que sua regra de federação da Anthropic corresponde.
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)Criar 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 Adquirir e usar o token leem do ambiente.
apiVersion: v1
kind: ServiceAccount
metadata:
name: claude-inference
namespace: inference
annotations:
azure.workload.identity/client-id: <IDENTITY_CLIENT_ID>Criar a credencial federada na identidade gerenciada
A credencial federada confia no emissor OIDC do seu cluster para essa 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://AzureADTokenExchangeRotular o pod e definir 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:latestDecodificar 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 Adquirir e usar o token e decodifique o resultado. Ele carrega o mesmo formato de claims que o 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 de 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 como 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ê pelo registro do emissor, criação de uma conta de serviço e 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ê federa 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" (avaliação contínua de acesso), ou 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 de identidade gerenciada de Usar uma identidade gerenciada, use o valor 86400 dessa 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 restrita de oid limita quais identidades podem trocar um token em primeiro lugar, conforme descrito em Definir o escopo da sua regra.
Regra de federação: Faça a correspondência com o ID de objeto da identidade gerenciada e seu ID de tenant. Para os tokens v2.0 que este guia configura, o valor de audience é o client ID do registro de aplicativo de audiência (o GUID <APP_ID> de Registrar 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 da 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 de dois saltos: 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 loop de atualização quando você fornece a busca do Entra como um callable provedor de token, conforme 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 de audiência de Registrar a audiência do token; o escopo api://<APP_ID>/.default solicita 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 de 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 de 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-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello from Azure"}],
)
print(message.content[0].text)De dentro de um pod rotulado, execute a troca cURL mostrada em Adquirir e usar 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 Configurar a Anthropic.audience da regra deve ser exatamente igual ao aud do token: o client ID do registro de aplicativo de 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 de 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 de 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 como 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 de (ou em vez de) o mapa claims; consulte Semântica de correspondência de regras para saber como os campos se combinam. Os valores 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; isso é uma propriedade do formato de subject do Entra, não de subject_prefix em geral.
Todas as identidades no seu tenant podem 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 com curinga ou
GUID parcial, autoriza todas as identidades gerenciadas e entidades
de serviço no tenant.
Restrinja o bloco match da regra ao escopo mais estreito que se adapte ao seu caso de uso:
oid como um valor exato: Defina claims.oid como o ID de objeto completo da identidade gerenciada. Um subject_prefix definido como esse ID de objeto completo é equivalente (o assistente do Console define ambos); nunca use um subject_prefix com curinga ou 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 desvio de configuração se o registro do emissor for editado posteriormente.audience como o valor exato de aud do seu token decodificado para que tokens emitidos para outros aplicativos sejam rejeitados.Was this page helpful?