Usar WIF com o Microsoft Entra ID
Federe identidades gerenciadas do Azure e o Entra Workload Identity com a Claude API para que suas cargas de trabalho do Azure possam chamar o Claude sem chaves de API estáticas.
As cargas de trabalho do Azure se autenticam na Claude API 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 da Anthropic de curta duração. A configuração segue o mesmo formato em todas as plataformas do Azure:
- Registrar o audience do token: Crie um "app registration" (registro de aplicativo) no seu "tenant" (locatário) do Microsoft Entra para representar o "audience" (público-alvo) da Claude API. Toda carga de trabalho no locatário solicita tokens do Entra para ele.
- Configurar a identidade para sua plataforma: Uma "managed identity" (identidade gerenciada) em VMs, VM Scale Sets, App Service, Functions e Container Apps, ou o Entra Workload Identity no AKS.
- Configurar a Anthropic: Registre o emissor do Entra do seu locatário, crie uma "service account" (conta de serviço) e escreva uma "federation rule" (regra de federação) que corresponda às "claims" (declarações) do token.
- Trocar em tempo de execução: Sua carga de trabalho troca seu token emitido pelo Entra em
POST /v1/oauth/tokenpor um token de acesso da Anthropicsk-ant-oat01-...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 locatário 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.
Pré-requisitos
- Familiaridade com os conceitos de WIF: contas de serviço, emissores de federação e regras de federação.
- Uma assinatura do Azure com permissão para atribuir identidades gerenciadas (ou configurar o Entra Workload Identity no AKS).
- Permissão para criar um registro de aplicativo e uma "service principal" (entidade de serviço) no seu locatário do Microsoft Entra (o audience compartilhado da Claude API). O Entra só emite tokens para um audience que exista no locatário, portanto a etapa Registrar o audience do token é obrigatória antes que qualquer solicitação de token seja bem-sucedida.
- O ID do seu locatário do Microsoft Entra. Encontre-o no portal do Azure em Microsoft Entra ID → Overview → Tenant ID.
- Permissão para criar contas de serviço, emissores de federação e regras de federação no Claude Console para sua organização da Anthropic.
Registrar o audience do token
O Microsoft Entra ID só emite um token quando o audience solicitado existe no seu locatário como um registro de aplicativo com uma entidade de serviço. Crie um registro de aplicativo para representar o audience da Claude API; toda carga de trabalho no locatário pode solicitar tokens para ele. Sem esse registro, as solicitações de token falham com um erro "resource not found in tenant" (AADSTS50001 nos endpoints de identidade gerenciada, AADSTS500011 no endpoint de token do Entra).
# Crie o registro de aplicativo que representa a audiência da Claude API.
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 locatário.
az ad sp create --id "$APP_ID"Usar uma identidade gerenciada
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.
Configurar a identidade gerenciada
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 tanto na claim
subquanto na claimoiddo 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.)Encontrar o endpoint de token da plataforma
A plataforma expõe um endpoint de token local assim que a identidade é anexada:
- VMs e VM Scale Sets: IMDS em
http://169.254.169.254/metadata/identity/oauth2/tokencom o cabeçalhoMetadata: trueeapi-version=2018-02-01. - App Service, Functions e Container Apps: A URL na variável de ambiente
IDENTITY_ENDPOINTcom o cabeçalhoX-IDENTITY-HEADERdefinido com o valor deIDENTITY_HEADER, eapi-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 nessa identidade e então falha na correspondência deoidda 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.- VMs e VM Scale Sets: IMDS em
Decodificar um token de exemplo
Solicite um token ao endpoint e decodifique seu payload para confirmar as claims com as quais 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 oidO ID de objeto da identidade gerenciada, idêntico a subVocê quer autorizar uma identidade gerenciada específica. Este é o padrão; a regra em Configurar a Anthropic corresponde a ele. azpO ID do cliente da identidade chamadora Você quer autorizar toda carga de trabalho que compartilha um registro de aplicativo. Para uma identidade gerenciada, azpé exclusivo dessa identidade, portanto é equivalente aoid.audO ID do cliente do registro de aplicativo do audience (o GUID <APP_ID>de Registrar o audience do token)Sempre. O campo audienceda regra deve ser exatamente igual ao valorauddo token.tidO ID do seu locatário Você quer defesa em profundidade. A URL do emissor já fixa o locatário. Se a claim
verdo token decodificado for1.0, os nomes e valores das claims diferem. Consulte Se seus tokens são v1.0 antes de continuar.
Configurar a Anthropic
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 locatários que reutilizam registros mais antigos que ainda emitem tokens v1.0.) O Entra publica um documento de descoberta OIDC na URL do emissor por locatário, portanto use o modo de descoberta. Cada locatário 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
}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 Delimitar 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 locatário. Para os tokens v2.0 que este guia configura, o valor de audience é o ID do cliente do registro de aplicativo do audience (o GUID <APP_ID> de Registrar o audience do token). Use o valor aud exato 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ê.
Adquirir e usar o token
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, 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 ID do cliente do registro de aplicativo do audience de Registrar o audience do token.
import os
import anthropic
import requests
from anthropic import WorkloadIdentityCredentials
# O URI identificador do registro do 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 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"))Verificar a configuração
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. Se a troca falhar com a resposta opaca 401 authentication_error (mensagem Authentication failed), verifique a página de histórico de autenticação para ver o motivo da negação, depois 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:
- Incompatibilidade de emissor: A
issuer_urlregistrada deve corresponder exatamente à claimissdo token. Um token v2.0 carregahttps://login.microsoftonline.com/<TENANT_ID>/v2.0; se a claimverdecodificada for1.0, consulte Se seus tokens são v1.0. - Tempo de vida do token: Tokens de identidade gerenciada carregam até 24 horas entre
iateexp. Se o emissor ainda tiver o7500do assistente (ou o padrão de 1 hora), aumentemax_jwt_lifetime_secondspara86400conforme descrito em Configurar a Anthropic. - Incompatibilidade de audience: O
audienceda regra deve ser exatamente igual aoauddo token: o ID do cliente do registro de aplicativo do audience para os tokens v2.0 que este guia configura. - Incompatibilidade de nome de claim: Uma regra que faz correspondência com uma claim que o token não carrega nunca é aprovada. Tokens v1.0 carregam o ID do cliente em
appid, não emazp; consulte Se seus tokens são v1.0.
Usar o Entra Workload Identity no AKS
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 e, em seguida, passa esse token do Entra ao SDK da Anthropic como o token de identidade.
Configurar o Entra Workload Identity
Habilitar o emissor OIDC e o workload identity no seu cluster
Habilitar o workload identity instala o webhook de mutação
azure-workload-identitypara 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 na anotação da conta de serviço (e é injetado no pod como
AZURE_CLIENT_ID), e o Object (principal) ID aparece como a claimoidcom a qual sua regra de federação da Anthropic faz 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)Criar a conta de serviço do Kubernetes anotada
O webhook
azure-workload-identitylê a anotaçãoazure.workload.identity/client-idpara injetarAZURE_CLIENT_IDno 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é o audience fixo do Entra para tokens de conta de serviço do Kubernetes recebidos; ele não tem relação com o audience da Claude API 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 injetaAZURE_FEDERATED_TOKEN_FILE,AZURE_CLIENT_IDeAZURE_TENANT_IDno pod. O arquivo emAZURE_FEDERATED_TOKEN_FILEconté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 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 }subeoidsão o ID de objeto da identidade gerenciada,audé o ID do cliente do registro de aplicativo do audience, eazpé o ID do cliente da identidade gerenciada (o valor deAZURE_CLIENT_ID). O tempo de vida difere do caminho de identidade gerenciada: tokensclient_credentialstêm como padrão uma janela aleatória de 60 a 90 minutos entreiateexp, não 24 horas.
Configurar a Anthropic
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 locatários que reutilizam registros mais antigos que ainda emitem tokens v1.0.) O Entra publica um documento de descoberta OIDC na URL do emissor por locatário, portanto use o modo de descoberta. Cada locatário 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
}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 Delimitar 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 locatário. Para os tokens v2.0 que este guia configura, o valor de audience é o ID do cliente do registro de aplicativo do audience (o GUID <APP_ID> de Registrar o audience do token). Use o valor aud exato 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ê.
Adquirir e usar o token
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) ao endpoint de token do Entra como uma asserção client_credentials federada e, em seguida, 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, como mostrado nos exemplos a seguir. A aba cURL mostra o fluxo bruto.
Dois IDs de cliente diferentes aparecem nos exemplos. <APP_ID> é o ID do cliente do registro de aplicativo do audience de Registrar o audience do token; o escopo api://<APP_ID>/.default pede ao Entra um token endereçado a esse audience. $AZURE_CLIENT_ID é o ID do cliente da identidade gerenciada, injetado pelo webhook, e identifica o chamador. Não substitua um pelo outro.
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"))Verificar a configuração
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. Se a troca falhar com a resposta opaca 401 authentication_error (mensagem Authentication failed), verifique a página de histórico de autenticação para ver o motivo da negação, depois 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:
- Incompatibilidade de emissor: A
issuer_urlregistrada deve corresponder exatamente à claimissdo token. Um token v2.0 carregahttps://login.microsoftonline.com/<TENANT_ID>/v2.0; se a claimverdecodificada for1.0, consulte Se seus tokens são v1.0. - Tempo de vida do token: Se uma política de tempo de vida de token do locatário ou a CAE estender o token
client_credentialspara além de 7500 segundos, aumente omax_jwt_lifetime_secondsdo emissor conforme descrito em Configurar a Anthropic. - Incompatibilidade de audience: O
audienceda regra deve ser exatamente igual aoauddo token: o ID do cliente do registro de aplicativo do audience para os tokens v2.0 que este guia configura. - Incompatibilidade de nome de claim: Uma regra que faz correspondência com uma claim que o token não carrega nunca é aprovada. Tokens v1.0 carregam o ID do cliente em
appid, não emazp; consulte Se seus tokens são v1.0.
Se seus tokens são v1.0
Este guia configura o registro de aplicativo do audience com api.requestedAccessTokenVersion: 2, portanto todo token que ele mostra é v2.0. Se você reutilizar um registro existente que deixa requestedAccessTokenVersion sem definição, 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:
- Emissor: A claim
isséhttps://sts.windows.net/<TENANT_ID>/em vez dehttps://login.microsoftonline.com/<TENANT_ID>/v2.0. Registre a URL do emissor exatamente como a claimissdo seu token a carrega. As duas URLs compartilham o mesmo JWKS, portanto o modo de descoberta funciona para qualquer uma delas. - Seletor do assistente: Escolha v1 (sts.windows.net) no seletor Token issuer do assistente Connect workload em vez de v2.0 (login.microsoftonline.com).
- Audience: A claim
audé a URI de identificador que você passou comoresource(por exemplo,api://<APP_ID>), não o ID do cliente do registro. Defina oaudienceda regra de federação com o valoraudexato do seu token decodificado. - Claim de ID do cliente: O ID do cliente da identidade chamadora aparece em
appid, não emazp. As duas claims nunca aparecem no mesmo token, portanto uma regra que faz correspondência comazpnunca é aprovada 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.
Delimitar o escopo da sua regra
Uma regra de federação pode fazer correspondência com o subject do token usando 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 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.
Restrinja o bloco match da regra ao escopo mais estreito que atenda ao seu caso de uso:
- Corresponder
oidcomo um valor exato: Definaclaims.oidcom o ID de objeto completo da identidade gerenciada. Umsubject_prefixdefinido com esse ID de objeto completo é equivalente (o assistente do Console define ambos); nunca use umsubject_prefixcuringa ou de GUID parcial, que corresponde a mais identidades do que você pretende. - Fixar
tidcomo defesa em profundidade: A URL do emissor já fixa seu locatário, mas adicionarclaims.tidprotege contra desvios de configuração caso o registro do emissor seja editado posteriormente. - Fixar o audience: Defina
audiencecom o valoraudexato do seu token decodificado para que tokens emitidos para outros aplicativos sejam rejeitados. - Usar uma regra separada para cada identidade gerenciada: Crie uma regra para cada identidade em vez de uma regra que autorize várias, para que você possa revogar o acesso de uma única carga de trabalho sem afetar as outras.
Próximos passos
- Revise o modelo de configuração completo em Workload Identity Federation.
- Consulte os guias de provedores para AWS, Google Cloud, GitHub Actions e Kubernetes.
- Para variáveis de ambiente, arquivos de perfil e precedência de credenciais, consulte a referência de WIF.
Was this page helpful?