Menggunakan WIF dengan Microsoft Entra ID
Federasikan managed identity Azure dan Entra Workload Identity dengan Claude API agar workload Azure Anda dapat memanggil Claude tanpa kunci API statis.
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. Penyiapannya mengikuti bentuk yang sama di setiap platform Azure:
- Daftarkan audience token: Buat satu app registration di tenant Microsoft Entra Anda untuk merepresentasikan audience Claude API. Setiap workload di tenant meminta token Entra untuk audience tersebut.
- Siapkan identitas untuk platform Anda: Managed identity pada VM, VM Scale Sets, App Service, Functions, dan Container Apps, atau Entra Workload Identity pada AKS.
- Konfigurasikan Anthropic: Daftarkan issuer Entra tenant Anda, buat service account, dan tulis federation rule yang cocok dengan claim token.
- Tukar saat runtime: Workload Anda menukar token yang diterbitkan Entra di
POST /v1/oauth/tokendengan access token Anthropicsk-ant-oat01-...dan memanggil Claude dengannya.
Pada kedua jalur, token yang Anda sajikan ke Anthropic membawa issuer Entra khusus tenant Anda dan object ID managed identity dalam claim 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 Sets, App Service, Functions, atau Container Apps; Menggunakan Entra Workload Identity pada AKS untuk AKS.
Prasyarat
- Pemahaman tentang konsep WIF: service account, federation issuer, dan federation rule.
- Subscription Azure dengan izin untuk menetapkan managed identity (atau mengonfigurasi Entra Workload Identity pada AKS).
- Izin untuk membuat satu app registration dan service principal di tenant Microsoft Entra Anda (audience Claude API bersama). Entra hanya menerbitkan token untuk audience yang ada di tenant, sehingga langkah Daftarkan audience token wajib dilakukan sebelum permintaan token apa pun berhasil.
- Tenant ID Microsoft Entra Anda. Temukan di portal Azure pada Microsoft Entra ID → Overview → Tenant ID.
- Izin untuk membuat service account, federation issuer, dan federation rule di Claude Console untuk organisasi Anthropic Anda.
Daftarkan audience token
Microsoft Entra ID hanya menerbitkan token ketika audience yang diminta ada di tenant Anda sebagai app registration dengan service principal. Buat satu app registration untuk merepresentasikan audience Claude API; setiap workload di tenant dapat meminta token untuknya. Tanpa registrasi ini, permintaan token gagal dengan error "resource not found in tenant" (AADSTS50001 dari endpoint managed identity, AADSTS500011 dari endpoint token Entra).
# Buat pendaftaran aplikasi yang merepresentasikan audience 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 pengidentifikasi api://<APP_ID>.
az ad app update --id "$APP_ID" \
--identifier-uris "api://$APP_ID" \
--set api.requestedAccessTokenVersion=2
# Buat service principal agar audience dapat di-resolve di tenant Anda.
az ad sp create --id "$APP_ID"Menggunakan managed identity
Gunakan jalur ini ketika workload Anda berjalan di 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.
Konfigurasikan managed identity
Lampirkan managed identity
Aktifkan managed identity system-assigned atau user-assigned pada resource Azure Anda. Di portal Azure, buka resource, masuk ke Identity, dan aktifkan System assigned (atau lampirkan identitas user-assigned).
Setelah identitas dibuat, catat Object (principal) ID-nya. GUID ini muncul sebagai claim
subdanoiddalam token yang diterbitkan, dan federation rule Anthropic Anda akan mencocokkannya. Anda dapat menemukannya di halaman Identity resource; untuk identitas user-assigned, nilainya adalah Object (principal) ID di halaman Overview resource 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:
- VM dan VM Scale Sets: IMDS di
http://169.254.169.254/metadata/identity/oauth2/tokendengan headerMetadata: truedanapi-version=2018-02-01. - App Service, Functions, dan Container Apps: URL dalam variabel lingkungan
IDENTITY_ENDPOINTdengan headerX-IDENTITY-HEADERyang diatur ke nilaiIDENTITY_HEADER, danapi-version=2019-08-01. IMDS tidak dapat dijangkau di platform ini.
Jika resource 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. Tanpanya, hasilnya bergantung pada apakah resource juga memiliki identitas system-assigned yang aktif: jika ya, permintaan secara diam-diam beralih ke identitas tersebut dan kemudian gagal pada pencocokanoidfederation rule Anda; jika tidak, permintaan langsung gagal begitu identitas user-assigned kedua dilampirkan.- VM dan VM Scale Sets: IMDS di
Dekode token sampel
Minta token dari endpoint dan dekode payload-nya untuk mengonfirmasi claim yang perlu dicocokkan oleh federation rule Anda. (Untuk perintah dekode, lihat Memecahkan masalah pertukaran yang gagal.) Token v2.0 untuk managed identity membawa claim 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 }Claim Nilai Cocokkan ini ketika oidObject ID managed identity, identik dengan subAnda ingin mengotorisasi satu managed identity tertentu. Ini adalah default; rule di Konfigurasikan Anthropic mencocokkannya. azpClient ID identitas pemanggil Anda ingin mengotorisasi setiap workload yang berbagi satu app registration. Untuk managed identity, azpunik untuk identitas tersebut, sehingga setara denganoid.audClient ID app registration audience (GUID <APP_ID>dari Daftarkan audience token)Selalu. Field audiencepada rule harus sama persis dengan nilaiaudtoken.tidTenant ID Anda Anda menginginkan pertahanan berlapis. URL issuer sudah mengunci tenant. Jika claim
verpada token yang didekode adalah1.0, nama dan nilai claim berbeda. Lihat Jika token Anda v1.0 sebelum melanjutkan.
Konfigurasikan Anthropic
Di Claude Console, buka Settings → Workload identity, klik Connect workload, dan pilih tile Microsoft Entra. Wizard memandu Anda mendaftarkan issuer, membuat service account, dan membuat federation rule.
Wizard membuat sumber daya ini untuk Anda. Gunakan nilai-nilai berikut, baik Anda memasukkannya di wizard maupun 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 menerbitkan token v1.0.) Entra memublikasikan dokumen OIDC discovery di URL issuer per-tenant, jadi gunakan mode discovery. Setiap tenant Microsoft Entra yang Anda federasikan memerlukan record 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
}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 rule Anda.
Federation rule: Cocokkan pada object ID managed identity dan tenant ID Anda. Untuk token v2.0 yang dikonfigurasi panduan ini, nilai audience adalah client ID app registration audience (GUID <APP_ID> dari Daftarkan audience 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 access token Anthropic yang dikembalikan oleh pertukaran, bukan masa berlaku token Entra; SDK me-refresh-nya untuk Anda.
Peroleh dan gunakan token
Saat runtime, workload Anda mengambil token Entra-nya, menukarnya di POST /v1/oauth/token, dan menggunakan bearer token yang dikembalikan untuk memanggil Claude. Setiap Anthropic SDK menangani pertukaran dan loop refresh ketika Anda menyediakan callable token-provider, 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 Sets, 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 audience dari Daftarkan audience token.
import os
import anthropic
import requests
from anthropic import WorkloadIdentityCredentials
# URI pengenal pendaftaran aplikasi audience (lihat Mendaftarkan audience 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"))Verifikasi penyiapan
Dari resource 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 diawali sk-ant-oat01- dan nilai expires_in dalam detik. Jika pertukaran gagal dengan respons 401 authentication_error yang tidak transparan (pesan Authentication failed), periksa halaman riwayat autentikasi untuk alasan penolakan, lalu dekode token Entra (lihat Memecahkan masalah pertukaran yang gagal untuk perintahnya) dan periksa penyebab paling umum di sisi Azure:
- Ketidakcocokan issuer:
issuer_urlyang terdaftar harus sama persis dengan claimisstoken. Token v2.0 membawahttps://login.microsoftonline.com/<TENANT_ID>/v2.0; jika claimveryang didekode adalah1.0, lihat Jika token Anda v1.0. - Masa berlaku token: Token managed identity membawa rentang hingga 24 jam antara
iatdanexp. Jika issuer masih memiliki nilai7500dari wizard (atau default 1 jam), naikkanmax_jwt_lifetime_secondske86400seperti dijelaskan di Konfigurasikan Anthropic. - Ketidakcocokan audience:
audiencepada rule harus sama persis denganaudtoken: client ID app registration audience untuk token v2.0 yang dikonfigurasi panduan ini. - Ketidakcocokan nama claim: Rule yang mencocokkan claim yang tidak dibawa token tidak akan pernah lolos. Token v1.0 membawa client ID di
appid, bukanazp; lihat Jika token Anda v1.0.
Menggunakan Entra Workload Identity pada AKS
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 OIDC issuer cluster AKS) ke dalam pod di path dalam AZURE_FEDERATED_TOKEN_FILE. Token terproyeksi tersebut bukan token yang diterbitkan Entra, sehingga untuk tetap berada di jalur yang dimediasi Entra yang dijelaskan di halaman ini, workload melakukan pertukaran dua lompatan: pertama-tama menukarkan token terproyeksi di https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/token (grant client_credentials terfederasi) dengan access token yang diterbitkan Entra, lalu meneruskan token Entra tersebut ke Anthropic SDK sebagai identity token.
Konfigurasikan Entra Workload Identity
Aktifkan OIDC issuer dan workload identity pada cluster Anda
Mengaktifkan workload identity menginstal mutating webhook
azure-workload-identityuntuk Anda; deploy secara manual hanya pada cluster non-AKS. Catat URL OIDC issuer cluster untuk federated credential yang Anda buat di 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: Client ID masuk ke anotasi service account (dan diinjeksikan ke pod sebagai
AZURE_CLIENT_ID), dan Object (principal) ID muncul sebagai claimoidyang dicocokkan oleh federation rule Anthropic Anda.az identity create \ --resource-group <RESOURCE_GROUP> \ --name claude-inference-identity \ --location <LOCATION> # Dimasukkan ke anotasi service account; diinjeksikan ke 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 beranotasi
Webhook
azure-workload-identitymembaca anotasiazure.workload.identity/client-iduntuk menginjeksikanAZURE_CLIENT_IDke dalam pod, yang dibaca dari environment 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 memercayai OIDC issuer cluster Anda untuk service account spesifik tersebut. Nilai
--audience api://AzureADTokenExchangeadalah audience tetap Entra untuk token service account Kubernetes yang masuk; nilai ini tidak terkait dengan audience 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 beranotasi. Webhook kemudian menginjeksikanAZURE_FEDERATED_TOKEN_FILE,AZURE_CLIENT_ID, danAZURE_TENANT_IDke dalam pod. File diAZURE_FEDERATED_TOKEN_FILEberisi token service account yang diproyeksikan Kubernetes, ditandatangani oleh OIDC issuer 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:latestDekode token sampel
Token yang dilihat federation rule Anthropic Anda bukanlah file terproyeksi; melainkan token yang diterbitkan Entra yang dikembalikan oleh pertukaran
client_credentials. Dari dalam pod berlabel, jalankan langkah 1 dari sampel cURL di Peroleh dan gunakan token dan dekode hasilnya. Token ini membawa bentuk claim 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 }subdanoidadalah object ID managed identity,audadalah client ID app registration audience, danazpadalah client ID managed identity (nilaiAZURE_CLIENT_ID). Masa berlakunya berbeda dari jalur managed identity: tokenclient_credentialssecara default memiliki jendela acak 60 hingga 90 menit antaraiatdanexp, bukan 24 jam.
Konfigurasikan Anthropic
Di Claude Console, buka Settings → Workload identity, klik Connect workload, dan pilih tile Microsoft Entra. Wizard memandu Anda mendaftarkan issuer, membuat service account, dan membuat federation rule.
Wizard membuat sumber daya ini untuk Anda. Gunakan nilai-nilai berikut, baik Anda memasukkannya di wizard maupun 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 menerbitkan token v1.0.) Entra memublikasikan dokumen OIDC discovery di URL issuer per-tenant, jadi gunakan mode discovery. Setiap tenant Microsoft Entra yang Anda federasikan memerlukan record 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
}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 rule Anda.
Federation rule: Cocokkan pada object ID managed identity dan tenant ID Anda. Untuk token v2.0 yang dikonfigurasi panduan ini, nilai audience adalah client ID app registration audience (GUID <APP_ID> dari Daftarkan audience 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 access token Anthropic yang dikembalikan oleh pertukaran, bukan masa berlaku token Entra; SDK me-refresh-nya untuk Anda.
Peroleh dan gunakan token
Saat runtime, pod melakukan pertukaran dua lompatan: pod mengirim token yang diproyeksikan Kubernetes (file di AZURE_FEDERATED_TOKEN_FILE) ke endpoint token Entra sebagai assertion client_credentials terfederasi, lalu menukar access token Entra yang dihasilkan di POST /v1/oauth/token. Setiap Anthropic SDK menangani pertukaran kedua dan loop refresh ketika Anda menyediakan pengambilan Entra sebagai callable token-provider, seperti ditunjukkan dalam contoh berikut. Tab cURL menunjukkan alur mentahnya.
Dua client ID berbeda muncul dalam sampel. <APP_ID> adalah client ID app registration audience dari Daftarkan audience token; scope api://<APP_ID>/.default meminta Entra untuk token yang dialamatkan ke audience tersebut. $AZURE_CLIENT_ID adalah client ID managed identity, diinjeksikan oleh webhook, dan mengidentifikasi pemanggil. Jangan menukar satu dengan yang lain.
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"))Verifikasi penyiapan
Dari dalam pod berlabel, jalankan pertukaran cURL yang ditunjukkan di Peroleh dan gunakan token dan konfirmasikan bahwa POST /v1/oauth/token mengembalikan 200 dengan access_token yang diawali sk-ant-oat01- dan nilai expires_in dalam detik. Jika pertukaran gagal dengan respons 401 authentication_error yang tidak transparan (pesan Authentication failed), periksa halaman riwayat autentikasi untuk alasan penolakan, lalu dekode token yang diterbitkan Entra dari langkah 1 (lihat Memecahkan masalah pertukaran yang gagal untuk perintahnya) dan periksa penyebab paling umum di sisi Azure:
- Ketidakcocokan issuer:
issuer_urlyang terdaftar harus sama persis dengan claimisstoken. Token v2.0 membawahttps://login.microsoftonline.com/<TENANT_ID>/v2.0; jika claimveryang didekode adalah1.0, lihat Jika token Anda v1.0. - Masa berlaku token: Jika kebijakan token-lifetime tenant atau CAE memperpanjang token
client_credentialsmelebihi 7500 detik, naikkanmax_jwt_lifetime_secondsissuer seperti dijelaskan di Konfigurasikan Anthropic. - Ketidakcocokan audience:
audiencepada rule harus sama persis denganaudtoken: client ID app registration audience untuk token v2.0 yang dikonfigurasi panduan ini. - Ketidakcocokan nama claim: Rule yang mencocokkan claim yang tidak dibawa token tidak akan pernah lolos. Token v1.0 membawa client ID di
appid, bukanazp; lihat Jika token Anda v1.0.
Jika token Anda v1.0
Panduan ini mengonfigurasi app registration audience dengan api.requestedAccessTokenVersion: 2, sehingga setiap token yang ditampilkan 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 claim ver-nya; jika nilainya 1.0, empat hal berubah:
- Issuer: Claim
issadalahhttps://sts.windows.net/<TENANT_ID>/alih-alihhttps://login.microsoftonline.com/<TENANT_ID>/v2.0. Daftarkan URL issuer persis seperti yang dibawa claimisstoken Anda. Kedua URL berbagi JWKS yang sama, sehingga mode discovery berfungsi untuk keduanya. - Pemilih wizard: Pilih v1 (sts.windows.net) di pemilih Token issuer pada wizard Connect workload alih-alih v2.0 (login.microsoftonline.com).
- Audience: Claim
audadalah identifier URI yang Anda teruskan sebagairesource(misalnya,api://<APP_ID>), bukan client ID registrasi. Aturaudiencefederation rule ke nilaiaudyang persis dari token yang Anda dekode. - Claim client ID: Client ID identitas pemanggil muncul di
appid, bukanazp. Kedua claim tidak pernah muncul dalam token yang sama, sehingga rule yang mencocokkanazptidak akan pernah lolos terhadap token v1.0.
Claim oid, sub, dan tid membawa nilai yang sama di kedua versi, sehingga sisa panduan ini berlaku tanpa perubahan.
Batasi cakupan rule Anda
Federation rule dapat mencocokkan subject token dengan subject_prefix selain (atau sebagai pengganti) map claims; lihat Semantik pencocokan rule untuk cara field-field tersebut digabungkan. Nilai sub Entra untuk identitas ini adalah GUID kanonis dengan panjang tetap, sehingga subject_prefix yang berisi object ID lengkap 36 karakter hanya cocok dengan subject tersebut; ini adalah sifat format subject Entra, bukan sifat subject_prefix secara umum.
Kunci blok match pada rule ke cakupan tersempit yang sesuai dengan kasus penggunaan Anda:
- Cocokkan
oidsebagai nilai persis: Aturclaims.oidke object ID lengkap managed identity.subject_prefixyang diatur ke object ID lengkap tersebut setara (wizard Console mengatur keduanya); jangan pernah menggunakan wildcard atausubject_prefixGUID parsial, yang cocok dengan lebih banyak identitas daripada yang Anda maksudkan. - Kunci
tidsebagai pertahanan berlapis: URL issuer sudah mengunci tenant Anda, tetapi menambahkanclaims.tidmelindungi dari pergeseran konfigurasi jika record issuer diedit di kemudian hari. - Kunci audience: Atur
audienceke nilaiaudyang persis dari token yang Anda dekode sehingga token yang dicetak untuk aplikasi lain ditolak. - Gunakan rule terpisah untuk setiap managed identity: Buat satu rule untuk setiap identitas alih-alih satu rule yang mengotorisasi beberapa identitas, sehingga Anda dapat mencabut akses satu workload tanpa memengaruhi yang lain.
Langkah selanjutnya
- Tinjau model konfigurasi lengkap di Workload Identity Federation.
- Lihat panduan provider untuk AWS, Google Cloud, GitHub Actions, dan Kubernetes.
- Untuk variabel lingkungan, file profil, dan prioritas kredensial, lihat referensi WIF.
Was this page helpful?