Workload Azure melakukan autentikasi ke Claude API dengan menyajikan JSON Web Token (JWT) yang diterbitkan oleh Microsoft Entra ID, lalu menukarnya dengan token akses Anthropic berumur pendek. Penyiapannya mengikuti bentuk yang sama di setiap platform Azure:
POST /v1/oauth/token dengan token akses Anthropic sk-ant-oat01-... dan memanggil Claude dengannya.Pada kedua jalur tersebut, token yang Anda sajikan ke Anthropic membawa issuer Entra spesifik tenant Anda dan object ID managed identity dalam klaim sub dan oid; yang berbeda hanyalah cara workload memperoleh token tersebut. Pilih bagian sesuai tempat workload Anda berjalan: Menggunakan managed identity untuk VM, VM Scale Set, App Service, Functions, atau Container Apps; Menggunakan Entra Workload Identity pada AKS untuk AKS.
Microsoft Entra ID hanya menerbitkan token ketika audiens yang diminta ada di tenant Anda sebagai app registration dengan service principal. Buat satu app registration untuk merepresentasikan audiens Claude API; setiap workload di tenant dapat meminta token untuknya. Tanpa registrasi ini, permintaan token gagal dengan kesalahan "resource not found in tenant" (AADSTS50001 dari endpoint managed identity, AADSTS500011 dari endpoint token Entra).
# Buat pendaftaran aplikasi yang merepresentasikan audiens Claude API.
APP_ID=$(az ad app create --display-name claude-api-federation --query appId -o tsv)
# Minta token akses v2.0 dan atur URI pengenal api://<APP_ID>.
az ad app update --id "$APP_ID" \
--identifier-uris "api://$APP_ID" \
--set api.requestedAccessTokenVersion=2
# Buat service principal agar audiens dapat di-resolve di tenant Anda.
az ad sp create --id "$APP_ID"Gunakan format URI pengenal api://<APP_ID>. Entra membatasi URI pengenal https:// hanya untuk domain terverifikasi dari tenant Anda sendiri, sehingga URI seperti https://api.anthropic.com tidak dapat didaftarkan di sebagian besar tenant; api://<APP_ID> diterima di mana saja. Dengan requestedAccessTokenVersion: 2, token untuk audiens ini adalah v2.0, yang merupakan asumsi panduan ini. Jika Anda menggunakan kembali registrasi yang sudah ada yang mengeluarkan token v1.0, lihat Jika token Anda adalah v1.0.
Gunakan jalur ini ketika workload Anda berjalan pada VM, VM Scale Set, App Service, Functions, atau Container Apps. Workload meminta JWT yang diterbitkan Entra untuk managed identity yang ditetapkan padanya dari endpoint token lokal platform, lalu menukar JWT tersebut dengan Anthropic.
Lampirkan managed identity
Aktifkan managed identity yang ditetapkan sistem (system-assigned) atau ditetapkan pengguna (user-assigned) pada sumber daya Azure Anda. Di portal Azure, buka sumber daya tersebut, masuk ke Identity, dan aktifkan System assigned (atau lampirkan identitas user-assigned).
Setelah identitas dibuat, catat Object (principal) ID-nya. GUID ini muncul sebagai klaim sub dan oid dalam token yang diterbitkan, dan federation rule Anthropic Anda akan mencocokkannya. Anda dapat menemukannya di halaman Identity sumber daya; untuk identitas user-assigned, nilainya adalah Object (principal) ID pada halaman Overview sumber daya managed identity. (Managed identity hanya memiliki service principal di Microsoft Entra ID, bukan app registration.)
Temukan endpoint token platform
Platform mengekspos endpoint token lokal setelah identitas dilampirkan:
http://169.254.169.254/metadata/identity/oauth2/token dengan header Metadata: true dan api-version=2018-02-01.IDENTITY_ENDPOINT dengan header X-IDENTITY-HEADER yang diatur ke nilai IDENTITY_HEADER, dan api-version=2019-08-01. IMDS tidak dapat dijangkau pada platform ini.Jika sumber daya memiliki lebih dari satu managed identity user-assigned, tambahkan client_id=<IDENTITY_CLIENT_ID> ke permintaan token untuk memilih salah satunya. Azure merekomendasikan untuk selalu menentukannya. Tanpa itu, hasilnya bergantung pada apakah sumber daya juga memiliki identitas system-assigned yang diaktifkan: jika ya, permintaan secara diam-diam beralih ke identitas tersebut dan kemudian gagal pada pencocokan oid federation rule Anda; jika tidak, permintaan langsung gagal begitu identitas user-assigned kedua dilampirkan.
Dekode token sampel
Minta token dari endpoint dan dekode payload-nya untuk mengonfirmasi klaim yang perlu dicocokkan oleh federation rule Anda. (Untuk perintah dekode, lihat Memecahkan masalah pertukaran yang gagal.) Token v2.0 untuk managed identity membawa klaim-klaim berikut:
{
"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
}| Klaim | Nilai | Cocokkan ini ketika |
|---|---|---|
oid | Object ID managed identity, identik dengan sub | Anda ingin mengotorisasi satu managed identity tertentu. Ini adalah default; aturan di Konfigurasikan Anthropic mencocokkannya. |
azp | Client ID identitas pemanggil | Anda ingin mengotorisasi setiap workload yang berbagi satu app registration. Untuk managed identity, azp unik untuk identitas tersebut, sehingga setara dengan oid. |
aud | Client ID app registration audiens (GUID <APP_ID> dari Daftarkan audiens token) | Selalu. Bidang audience aturan harus sama persis dengan nilai aud token. |
tid | ID tenant Anda | Anda menginginkan pertahanan berlapis. URL issuer sudah mengunci tenant. |
Jika klaim ver token yang didekode adalah 1.0, nama dan nilai klaimnya berbeda. Lihat Jika token Anda adalah v1.0 sebelum melanjutkan.
Di Claude Console, buka Settings → Workload identity, klik Connect workload, dan pilih ubin Microsoft Entra. Wizard akan memandu Anda mendaftarkan issuer, membuat service account, dan membuat federation rule.
Wizard ini membuat sumber daya tersebut untuk Anda. Gunakan nilai-nilai berikut baik saat Anda memasukkannya di wizard maupun saat mengirimkannya ke Admin API:
Federation issuer: Pilih v2.0 (login.microsoftonline.com) di pemilih Token issuer pada wizard. (Pemilih ini default ke v1; default tersebut ada untuk tenant yang menggunakan kembali registrasi lama yang masih mengeluarkan token v1.0.) Entra menerbitkan dokumen penemuan OIDC di URL issuer per-tenant, jadi gunakan mode discovery. Setiap tenant Microsoft Entra yang Anda federasikan memerlukan catatan issuer-nya sendiri.
{
"name": "azure-prod-tenant",
"issuer_url": "https://login.microsoftonline.com/<TENANT_ID>/v2.0",
"jwks": { "type": "discovery" },
"max_jwt_lifetime_seconds": 86400
}Workload managed identity memerlukan max_jwt_lifetime_seconds: 86400. Azure menerbitkan token managed identity dengan hingga 24 jam antara iat dan exp karena Azure menyimpan cache token setiap sumber daya selama jendela tersebut dan tidak menawarkan cara untuk memaksa penyegaran lebih awal, dan default 1 jam pada issuer menolak token tersebut dengan invalid_grant. Ubin Microsoft Entra pada wizard Connect workload membuat issuer dengan max_jwt_lifetime_seconds diatur ke 7500 dan tidak menyediakan bidang untuk mengubahnya selama pembuatan, jadi selesaikan wizard, lalu buka Settings → Workload identity → Issuers, edit issuer, dan naikkan nilainya menjadi 86400. Anda juga dapat memperbarui issuer melalui Admin API.
Masa berlaku yang diterima lebih lama berarti token Entra yang bocor tetap dapat ditukar lebih lama. Jika token bocor, tuasnya adalah menonaktifkan federation rule; pencocokan oid yang ketat membatasi identitas mana yang dapat menukar token sejak awal, seperti dijelaskan di Batasi cakupan aturan Anda.
Federation rule: Cocokkan dengan object ID managed identity dan ID tenant Anda. Untuk token v2.0 yang dikonfigurasi panduan ini, nilai audience adalah client ID app registration audiens (GUID <APP_ID> dari Daftarkan audiens token). Gunakan nilai aud yang persis dari token yang Anda dekode.
{
"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 adalah masa berlaku token akses Anthropic yang dikembalikan oleh pertukaran, bukan masa berlaku token Entra; SDK menyegarkannya untuk Anda.
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 penyegaran ketika Anda menyediakan callable penyedia token, seperti ditunjukkan dalam contoh berikut. Tab cURL menunjukkan alur mentahnya.
Sampel mengambil token managed identity dari endpoint token platform: IMDS pada VM dan VM Scale Set, atau layanan IDENTITY_ENDPOINT pada App Service, Functions, dan Container Apps. Ganti <APP_ID> dalam nilai resource api://<APP_ID> dengan client ID app registration audiens dari Daftarkan audiens token.
Jika workload Anda sudah menggunakan pustaka klien Azure Identity, teruskan akuisisi tokennya (DefaultAzureCredential dengan scope api://<APP_ID>/.default) sebagai penyedia token identitas alih-alih memanggil endpoint token secara langsung. Pustaka tersebut memilih endpoint yang benar di setiap platform Azure, termasuk AKS dengan Entra Workload Identity.
import os
import anthropic
import requests
from anthropic import WorkloadIdentityCredentials
# URI pengidentifikasi dari registrasi aplikasi audiens (lihat Mendaftarkan audiens token).
AUDIENCE = "api://<APP_ID>"
def fetch_entra_token() -> str:
"""Fetch a managed identity token from the platform's token endpoint."""
# Dengan beberapa identitas yang ditetapkan pengguna, tambahkan client_id=<IDENTITY_CLIENT_ID>
# ke parameter permintaan untuk memilih salah satunya.
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 atau 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"))Dari sumber daya Azure Anda, jalankan pertukaran cURL yang ditunjukkan di Peroleh dan gunakan token dan konfirmasikan bahwa POST /v1/oauth/token mengembalikan 200 dengan access_token yang dimulai dengan sk-ant-oat01- dan nilai expires_in dalam detik. Pada 400 invalid_grant, dekode token Entra (lihat Memecahkan masalah pertukaran yang gagal untuk perintahnya) dan periksa penyebab paling umum di sisi Azure:
issuer_url yang terdaftar harus cocok persis dengan klaim iss token. Token v2.0 membawa https://login.microsoftonline.com/<TENANT_ID>/v2.0; jika klaim ver yang didekode adalah 1.0, lihat Jika token Anda adalah v1.0.iat dan exp. Jika issuer masih memiliki nilai 7500 dari wizard (atau default 1 jam), naikkan max_jwt_lifetime_seconds menjadi 86400 seperti dijelaskan di Konfigurasikan Anthropic.audience aturan harus sama persis dengan aud token: client ID app registration audiens untuk token v2.0 yang dikonfigurasi panduan ini.appid, bukan azp; lihat Jika token Anda adalah v1.0.Gunakan jalur ini ketika workload Anda berjalan di pod AKS. Entra Workload Identity memfederasikan service account Kubernetes dengan managed identity user-assigned: Kubernetes memproyeksikan token service account (ditandatangani oleh issuer OIDC klaster AKS) ke dalam pod pada path di AZURE_FEDERATED_TOKEN_FILE. Token yang diproyeksikan tersebut bukan token yang diterbitkan Entra, jadi untuk tetap berada di jalur yang dimediasi Entra yang dijelaskan di halaman ini, workload melakukan pertukaran dua langkah: pertama menukarkan token yang diproyeksikan di https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/token (grant client_credentials terfederasi) dengan token akses yang diterbitkan Entra, lalu meneruskan token Entra tersebut ke SDK Anthropic sebagai token identitas.
Pod AKS dapat secara alternatif melewati pertukaran Entra dan menyajikan token service account yang diproyeksikan Kubernetes langsung ke Anthropic. Jalur tersebut mendaftarkan issuer OIDC klaster AKS Anda ke Anthropic alih-alih tenant Entra Anda. Lihat Menggunakan WIF dengan Kubernetes untuk alur tersebut.
Aktifkan issuer OIDC dan workload identity pada klaster Anda
Mengaktifkan workload identity akan memasang mutating webhook azure-workload-identity untuk Anda; pasang secara manual hanya pada klaster non-AKS. Catat URL issuer OIDC klaster untuk federated credential yang Anda buat pada langkah berikutnya.
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)Buat managed identity user-assigned
Catat dua nilai dari identitas tersebut: Client ID masuk ke anotasi service account (dan disuntikkan ke pod sebagai AZURE_CLIENT_ID), dan Object (principal) ID muncul sebagai klaim oid yang dicocokkan oleh federation rule Anthropic Anda.
az identity create \
--resource-group <RESOURCE_GROUP> \
--name claude-inference-identity \
--location <LOCATION>
# Dimasukkan ke dalam anotasi service account; diinjeksikan ke dalam pod sebagai AZURE_CLIENT_ID.
IDENTITY_CLIENT_ID=$(az identity show \
--resource-group <RESOURCE_GROUP> \
--name claude-inference-identity \
--query clientId -o tsv)
# Muncul sebagai klaim oid yang dicocokkan oleh aturan federasi Anda.
IDENTITY_OBJECT_ID=$(az identity show \
--resource-group <RESOURCE_GROUP> \
--name claude-inference-identity \
--query principalId -o tsv)Buat service account Kubernetes yang dianotasi
Webhook azure-workload-identity membaca anotasi azure.workload.identity/client-id untuk menyuntikkan AZURE_CLIENT_ID ke dalam pod, yang dibaca dari lingkungan oleh sampel di Peroleh dan gunakan token.
apiVersion: v1
kind: ServiceAccount
metadata:
name: claude-inference
namespace: inference
annotations:
azure.workload.identity/client-id: <IDENTITY_CLIENT_ID>Buat federated credential pada managed identity
Federated credential mempercayai issuer OIDC klaster Anda untuk service account spesifik tersebut. Nilai --audience api://AzureADTokenExchange adalah audiens tetap Entra untuk token service account Kubernetes yang masuk; nilai ini tidak terkait dengan audiens Claude API yang Anda daftarkan sebelumnya.
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://AzureADTokenExchangeBeri label pada pod dan atur service account-nya
Pod harus membawa label azure.workload.identity/use: "true" dan berjalan sebagai service account yang dianotasi. Webhook kemudian menyuntikkan AZURE_FEDERATED_TOKEN_FILE, AZURE_CLIENT_ID, dan AZURE_TENANT_ID ke dalam pod. File di AZURE_FEDERATED_TOKEN_FILE berisi token service account yang diproyeksikan Kubernetes, ditandatangani oleh issuer OIDC klaster 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:latestDekode token sampel
Token yang dilihat oleh federation rule Anthropic Anda bukanlah file yang diproyeksikan; melainkan token yang diterbitkan Entra yang dikembalikan oleh pertukaran client_credentials. Dari dalam pod yang berlabel, jalankan langkah 1 dari sampel cURL di Peroleh dan gunakan token dan dekode hasilnya. Token tersebut membawa bentuk klaim yang sama dengan jalur managed identity:
{
"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 dan oid adalah object ID managed identity, aud adalah client ID app registration audiens, dan azp adalah client ID managed identity (nilai dari AZURE_CLIENT_ID). Masa berlakunya berbeda dari jalur managed identity: token client_credentials secara default memiliki jendela acak 60 hingga 90 menit antara iat dan exp, bukan 24 jam.
Di Claude Console, buka Settings → Workload identity, klik Connect workload, dan pilih ubin Microsoft Entra. Wizard akan memandu Anda mendaftarkan issuer, membuat service account, dan membuat federation rule.
Wizard ini membuat sumber daya tersebut untuk Anda. Gunakan nilai-nilai berikut baik saat Anda memasukkannya di wizard maupun saat mengirimkannya ke Admin API:
Federation issuer: Pilih v2.0 (login.microsoftonline.com) di pemilih Token issuer pada wizard. (Pemilih ini default ke v1; default tersebut ada untuk tenant yang menggunakan kembali registrasi lama yang masih mengeluarkan token v1.0.) Entra menerbitkan dokumen penemuan OIDC di URL issuer per-tenant, jadi gunakan mode discovery. Setiap tenant Microsoft Entra yang Anda federasikan memerlukan catatan issuer-nya sendiri.
{
"name": "azure-prod-tenant",
"issuer_url": "https://login.microsoftonline.com/<TENANT_ID>/v2.0",
"jwks": { "type": "discovery" },
"max_jwt_lifetime_seconds": 7500
}Ubin Microsoft Entra pada wizard Connect workload membuat issuer dengan max_jwt_lifetime_seconds diatur ke 7500 (sedikit lebih dari 2 jam), yang mencakup masa berlaku default 60 hingga 90 menit dari token client_credentials. Kebijakan masa berlaku token tenant atau Continuous Access Evaluation (CAE) dapat memperpanjang masa berlaku tersebut. Jika exp dikurangi iat pada token yang Anda dekode melebihi 7500 detik, edit issuer di Settings → Workload identity → Issuers dan naikkan max_jwt_lifetime_seconds agar sesuai, atau pertukaran akan gagal dengan invalid_grant. Jika tenant Anda juga menjalankan workload managed identity dari Menggunakan managed identity, gunakan nilai 86400 dari bagian tersebut, yang mencakup kedua jalur.
Masa berlaku yang diterima lebih lama berarti token Entra yang bocor tetap dapat ditukar lebih lama. Jika token bocor, tuasnya adalah menonaktifkan federation rule; pencocokan oid yang ketat membatasi identitas mana yang dapat menukar token sejak awal, seperti dijelaskan di Batasi cakupan aturan Anda.
Federation rule: Cocokkan dengan object ID managed identity dan ID tenant Anda. Untuk token v2.0 yang dikonfigurasi panduan ini, nilai audience adalah client ID app registration audiens (GUID <APP_ID> dari Daftarkan audiens token). Gunakan nilai aud yang persis dari token yang Anda dekode.
{
"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 adalah masa berlaku token akses Anthropic yang dikembalikan oleh pertukaran, bukan masa berlaku token Entra; SDK menyegarkannya untuk Anda.
Saat runtime, pod melakukan pertukaran dua langkah: pod mengirimkan token yang diproyeksikan Kubernetes (file di AZURE_FEDERATED_TOKEN_FILE) ke endpoint token Entra sebagai assertion client_credentials terfederasi, lalu menukar token akses Entra yang dihasilkan di POST /v1/oauth/token. Setiap SDK Anthropic menangani pertukaran kedua dan loop penyegaran ketika Anda menyediakan pengambilan Entra sebagai callable penyedia token, seperti ditunjukkan dalam contoh berikut. Tab cURL menunjukkan alur mentahnya.
Dua client ID yang berbeda muncul dalam sampel. <APP_ID> adalah client ID app registration audiens dari Daftarkan audiens token; scope api://<APP_ID>/.default meminta Entra untuk token yang ditujukan ke audiens tersebut. $AZURE_CLIENT_ID adalah client ID managed identity, disuntikkan oleh webhook, dan mengidentifikasi pemanggil. Jangan menukar satu dengan yang lain.
Jika workload Anda sudah menggunakan pustaka klien Azure Identity, teruskan akuisisi tokennya (DefaultAzureCredential dengan scope api://<APP_ID>/.default) sebagai penyedia token identitas alih-alih melakukan pertukaran dua langkah sendiri. Pustaka tersebut membaca variabel lingkungan AZURE_FEDERATED_TOKEN_FILE, AZURE_CLIENT_ID, dan AZURE_TENANT_ID yang sama dan menangani pertukaran 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"))Dari dalam pod yang berlabel, jalankan pertukaran cURL yang ditunjukkan di Peroleh dan gunakan token dan konfirmasikan bahwa POST /v1/oauth/token mengembalikan 200 dengan access_token yang dimulai dengan sk-ant-oat01- dan nilai expires_in dalam detik. Pada 400 invalid_grant, dekode token yang diterbitkan Entra dari langkah 1 (lihat Memecahkan masalah pertukaran yang gagal untuk perintahnya) dan periksa penyebab paling umum di sisi Azure:
issuer_url yang terdaftar harus cocok persis dengan klaim iss token. Token v2.0 membawa https://login.microsoftonline.com/<TENANT_ID>/v2.0; jika klaim ver yang didekode adalah 1.0, lihat Jika token Anda adalah v1.0.client_credentials melewati 7500 detik, naikkan max_jwt_lifetime_seconds issuer seperti dijelaskan di Konfigurasikan Anthropic.audience aturan harus sama persis dengan aud token: client ID app registration audiens untuk token v2.0 yang dikonfigurasi panduan ini.appid, bukan azp; lihat Jika token Anda adalah v1.0.Panduan ini mengonfigurasi app registration audiens dengan api.requestedAccessTokenVersion: 2, sehingga setiap token yang ditampilkannya adalah v2.0. Jika Anda menggunakan kembali registrasi yang sudah ada yang membiarkan requestedAccessTokenVersion tidak diatur, Entra menerbitkan token v1.0 sebagai gantinya. Dekode token sampel dan periksa klaim ver-nya; jika nilainya 1.0, empat hal berubah:
iss adalah https://sts.windows.net/<TENANT_ID>/ alih-alih https://login.microsoftonline.com/<TENANT_ID>/v2.0. Daftarkan URL issuer persis seperti yang dibawa klaim iss token Anda. Kedua URL berbagi JWKS yang sama, sehingga mode discovery berfungsi untuk keduanya.aud adalah URI pengenal yang Anda teruskan sebagai resource (misalnya, api://<APP_ID>), bukan client ID registrasi. Atur audience federation rule ke nilai aud yang persis dari token yang Anda dekode.appid, bukan azp. Kedua klaim tidak pernah muncul dalam token yang sama, sehingga aturan yang mencocokkan azp tidak akan pernah lolos terhadap token v1.0.Klaim oid, sub, dan tid membawa nilai yang sama di kedua versi, sehingga sisa panduan ini berlaku tanpa perubahan.
Federation rule dapat mencocokkan subjek token dengan subject_prefix sebagai tambahan (atau pengganti) map claims; lihat Semantik pencocokan aturan untuk cara bidang-bidang tersebut digabungkan. Nilai sub Entra untuk identitas-identitas ini adalah GUID kanonis dengan panjang tetap, sehingga subject_prefix yang berisi object ID lengkap 36 karakter hanya cocok dengan subjek tersebut; ini adalah properti dari format subjek Entra, bukan dari subject_prefix secara umum.
Setiap identitas di tenant Anda dapat meminta token untuk audiens yang terdaftar,
sehingga audience dan tid saja tidak mengidentifikasi workload tertentu. Aturan yang
menghilangkan pencocokan oid (atau azp/appid), atau yang menggunakan wildcard atau
subject_prefix GUID parsial, mengotorisasi setiap managed identity dan service
principal di tenant.
Kunci blok match aturan ke cakupan tersempit yang sesuai dengan kasus penggunaan Anda:
oid sebagai nilai persis: Atur claims.oid ke object ID lengkap managed identity. subject_prefix yang diatur ke object ID lengkap tersebut setara (wizard Console mengatur keduanya); jangan pernah menggunakan wildcard atau subject_prefix GUID parsial, yang mencocokkan lebih banyak identitas daripada yang Anda maksudkan.tid sebagai pertahanan berlapis: URL issuer sudah mengunci tenant Anda, tetapi menambahkan claims.tid melindungi dari penyimpangan konfigurasi jika catatan issuer diedit di kemudian hari.audience ke nilai aud yang persis dari token yang Anda dekode sehingga token yang dicetak untuk aplikasi lain ditolak.Was this page helpful?