Workload Azure melakukan autentikasi ke Claude API dengan menyajikan JSON Web Token (JWT) yang diterbitkan oleh Microsoft Entra ID, lalu menukarnya dengan access token Anthropic berumur pendek. Ada dua cara umum untuk memperoleh token yang diterbitkan Entra:
http://169.254.169.254/metadata/identity/oauth2/token dan menerima JWT untuk identitas yang ditetapkan padanya.AZURE_FEDERATED_TOKEN_FILE. Workload menukar token tersebut di Entra untuk mendapatkan access token yang diterbitkan Entra.Dalam kedua kasus tersebut, token yang diterbitkan Entra yang Anda sajikan ke Anthropic membawa issuer Entra spesifik tenant (langkah Konfigurasi Anthropic di bawah menunjukkan URL persis yang harus didaftarkan) dan object ID dari managed identity pada klaim sub dan oid. Anda mendaftarkan issuer tersebut ke Anthropic satu kali, menulis federation rule yang mencocokkan klaim yang diharapkan, dan workload Anda menukar token Entra-nya dengan access token sk-ant-oat01-... saat runtime.
Pod AKS dapat secara alternatif melewati pertukaran Entra dan menyajikan token service account yang diproyeksikan Kubernetes langsung ke Anthropic. Jalur tersebut mendaftarkan OIDC issuer klaster AKS Anda ke Anthropic alih-alih tenant Entra Anda. Lihat Kubernetes untuk alur tersebut.
Siapkan identitas yang akan diterbitkan tokennya oleh Azure. Pilih jalur yang sesuai dengan tempat workload Anda berjalan.
Token yang diterbitkan Entra untuk managed identity membawa klaim-klaim berikut:
{
"iss": "https://login.microsoftonline.com/<TENANT_ID>/v2.0",
"sub": "9f8e7d6c-1a2b-3c4d-5e6f-...",
"aud": "https://api.anthropic.com",
"oid": "9f8e7d6c-1a2b-3c4d-5e6f-...",
"tid": "<TENANT_ID>",
"azp": "<CLIENT_ID>",
"exp": 1775527120
}sub dan oid identik (object ID dari managed identity). azp adalah application atau client ID. Cocokkan pada oid untuk mengotorisasi satu identitas spesifik, atau pada azp untuk mengotorisasi identitas apa pun yang terkait dengan registrasi aplikasi. Klaim tid mengulangi tenant ID Anda; mencocokkan pada klaim ini merupakan lapisan pertahanan tambahan, karena URL issuer sudah mengunci tenant.
Ikuti panduan penyiapan untuk mendaftarkan federation issuer, membuat service account Anthropic, dan membuat federation rule di Claude Console. Di Console, pilih opsi provider OIDC dan berikan nilai-nilai spesifik Entra berikut.
Federation issuer: Entra memublikasikan dokumen OIDC discovery pada URL issuer per-tenant, jadi gunakan mode discovery. Setiap tenant Azure yang Anda federasikan memerlukan record issuer tersendiri.
{
"name": "azure-prod-tenant",
"issuer_url": "https://login.microsoftonline.com/<TENANT_ID>/v2.0",
"jwks_source": "discovery"
}Tergantung pada versi token, klaim iss mungkin berupa https://sts.windows.net/<TENANT_ID>/. Decode token managed identity Anda (bagian Verifikasi di bawah menunjukkan caranya) dan daftarkan nilai iss mana pun yang terkandung di dalamnya. Kedua URL tersebut berbagi JWKS yang sama, sehingga mode discovery berfungsi untuk keduanya.
Federation rule: Cocokkan pada object ID managed identity dan tenant ID Anda.
{
"name": "azure-inference-worker",
"issuer_id": "fdis_...",
"match": {
"audience": "https://api.anthropic.com",
"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
}Saat runtime, workload Anda mengambil token Entra-nya, menukarnya di POST /v1/oauth/token, dan menggunakan bearer token yang dikembalikan untuk memanggil Claude. Setiap SDK Anthropic menangani pertukaran dan loop refresh ketika Anda menyediakan callable token-provider, seperti yang ditunjukkan dalam contoh-contoh berikut. Tab cURL menunjukkan alur mentahnya.
import os
import anthropic
import requests
from anthropic import WorkloadIdentityCredentials
IMDS_URL = "http://169.254.169.254/metadata/identity/oauth2/token"
def fetch_entra_token() -> str:
"""Fetch a managed identity token from Azure IMDS."""
response = requests.get(
IMDS_URL,
headers={"Metadata": "true"},
params={"api-version": "2018-02-01", "resource": "https://api.anthropic.com"},
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)Pada AKS, file di AZURE_FEDERATED_TOKEN_FILE adalah token service account yang diproyeksikan Kubernetes dan ditandatangani oleh OIDC issuer klaster Anda, bukan token yang diterbitkan Entra. Untuk tetap pada jalur yang dimediasi Entra seperti yang dijelaskan di halaman ini, tukarkan token tersebut di https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/token (grant client_credentials federated) terlebih dahulu, lalu teruskan access token Entra yang dihasilkan ke SDK Anthropic sebagai identity token.
import os
from pathlib import Path
import httpx
import anthropic
from anthropic import WorkloadIdentityCredentials
def fetch_entra_token_via_federation() -> str:
federated_token = Path(os.environ["AZURE_FEDERATED_TOKEN_FILE"]).read_text()
response = httpx.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": "https://api.anthropic.com/.default",
"client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
"client_assertion": federated_token,
},
)
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)Sebagai alternatif, daftarkan OIDC issuer klaster AKS Anda ke Anthropic secara langsung dan lewati langkah Entra. Lihat Kubernetes untuk pola tersebut.
Dari resource Azure Anda, jalankan pertukaran cURL yang ditunjukkan sebelumnya dan pastikan bahwa POST /v1/oauth/token mengembalikan 200 dengan access_token yang diawali sk-ant-oat01- dan nilai expires_in dalam detik. Pada 400 invalid_grant, lihat Memecahkan masalah pertukaran yang gagal; penyebab paling umum di sisi Azure adalah ketidakcocokan antara issuer_url yang Anda daftarkan dan klaim iss dalam token Anda yang telah di-decode. Keduanya harus cocok persis. Untuk token managed identity, nilai iss adalah https://login.microsoftonline.com/<TENANT_ID>/v2.0 atau https://sts.windows.net/<TENANT_ID>/.
Klaim oid adalah GUID dari managed identity dan tidak memiliki prefiks yang stabil.
subject_prefix dengan * mencocokkan identitas sembarang dalam tenant, sehingga
workload apa pun yang memegang managed identity dapat memperoleh token Anthropic
yang difederasikan.
Kunci blok match pada rule ke cakupan tersempit yang sesuai dengan kasus penggunaan Anda:
oid sebagai nilai persis: Atur claims.oid ke object ID lengkap dari managed identity dan jangan pernah gunakan subject_prefix untuk token Azure.tid sebagai lapisan pertahanan tambahan: URL issuer sudah mengunci tenant Anda, tetapi menambahkan claims.tid melindungi dari pergeseran konfigurasi jika record issuer diedit di kemudian hari.audience ke https://api.anthropic.com sehingga token yang dibuat untuk resource lain ditolak.Was this page helpful?