Okta dapat bertindak sebagai penyedia identitas workload dengan menerbitkan token akses OIDC ke aplikasi layanan melalui grant OAuth 2.0 client_credentials. Workload Anda mengautentikasi ke Okta (biasanya dengan private_key_jwt, sehingga tidak ada rahasia bersama yang disimpan), menerima "JSON Web Token" (token web JSON), atau JWT, yang telah ditandatangani, dan menukarkan JWT tersebut dengan Anthropic untuk mendapatkan token akses berumur pendek.
URL issuer dari authorization server Okta berbentuk https://<your-domain>.okta.com/oauth2/<auth-server-id>. Jika Anda menggunakan server default bawaan, path-nya adalah /oauth2/default.
Anda harus menggunakan custom authorization server Okta (termasuk yang default). Token yang diterbitkan langsung oleh authorization server org Okta (endpoint /oauth2/v1/token tanpa ID authorization server di path) tidak dapat divalidasi oleh pihak eksternal karena Okta tidak mempublikasikan kunci penandatanganan untuk token tersebut.
Ada banyak cara untuk mengonfigurasi dan mengautentikasi ke Okta yang berada di luar cakupan dokumentasi ini. Pastikan bahwa konfigurasi dan mekanisme autentikasi Anda mengikuti panduan dan praktik keamanan perusahaan Anda.
/v1/token Okta dan menjangkau api.anthropic.com.Secara garis besar Anda perlu:
Navigasi yang tepat bergantung pada konfigurasi org Okta Anda dan versi admin console. Langkah-langkah bernomor berikut memandu Anda melalui salah satu jalur yang umum:
private_key_jwt) dan daftarkan JWK publik workload Anda. Sebagai alternatif, gunakan client secret jika lingkungan Anda dapat menyimpannya dengan aman. Untuk contoh berikut Anda mungkin perlu menonaktifkan persyaratan DPoP pada aplikasi; pastikan bahwa pengaturan produksi Anda mematuhi persyaratan keamanan organisasi Anda.https://api.anthropic.com sehingga token akses yang diterbitkan membawa klaim aud tersebut. Anthropic memvalidasi aud terhadap nilai tetap ini.anthropic.access). Okta menolak permintaan client_credentials yang tidak menyertakan scope yang telah diberikan.Untuk aplikasi layanan yang menggunakan client_credentials, Okta mengatur klaim sub dari token akses yang diterbitkan ke Client ID aplikasi, dan iss ke URL issuer dari authorization server.
Di Claude Console, buka Settings → Workload identity, klik Connect workload, dan pilih Custom OIDC. Wizard akan memandu Anda melalui pendaftaran issuer, pembuatan service account, dan pembuatan 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: Gunakan URL custom authorization server Okta Anda dan mode discovery. Anthropic membaca dokumen discovery .well-known/openid-configuration Okta dan mengambil JWKS dari jwks_uri yang diiklankannya.
{
"name": "okta-prod",
"issuer_url": "https://acme.okta.com/oauth2/aus1a2b3c4d5e6f7g8h9",
"jwks": { "type": "discovery" }
}Federation rule: Cocokkan pada klaim sub Okta, yang merupakan Client ID aplikasi layanan. Jika Anda mendefinisikan custom claim di Okta, Anda dapat mencocokkan pada klaim tersebut sebagai gantinya dengan map claims atau condition CEL.
{
"name": "okta-pipeline",
"issuer_id": "fdis_...",
"match": {
"subject_prefix": "0oa1b2c3d4e5f6g7h8i9",
"audience": "https://api.anthropic.com"
},
"target": { "type": "service_account", "service_account_id": "svac_..." },
"workspace_id": "wrkspc_...",
"oauth_scope": "workspace:developer",
"token_lifetime_seconds": 600
}Tidak seperti penyedia native platform (AWS, Google Cloud, Kubernetes), yang menyediakan token di dalam runtime workload (melalui file yang diproyeksikan atau endpoint metadata lokal), Okta tidak melakukannya. Workload Anda harus memanggil endpoint token Okta untuk mendapatkan JWT, lalu meneruskan JWT tersebut ke SDK Anthropic sebagai token identitas.
import os
import httpx
import anthropic
from anthropic import WorkloadIdentityCredentials
def fetch_okta_token() -> str:
response = httpx.post(
f"{os.environ['OKTA_ISSUER']}/v1/token",
data={
"grant_type": "client_credentials",
"scope": "anthropic.access",
"client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
# Buat JWT client_assertion RFC 7523 yang ditandatangani dengan kunci privat aplikasi Okta Anda
"client_assertion": build_signed_client_assertion(),
},
)
response.raise_for_status()
return response.json()["access_token"]
client = anthropic.Anthropic(
credentials=WorkloadIdentityCredentials(
identity_token_provider=fetch_okta_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, Claude"}],
)
print(next(block.text for block in message.content if block.type == "text"))Setiap tab SDK menunjukkan pola callable: SDK Anthropic memanggil penyedia token identitas Anda lagi setiap kali token akses Anthropic mendekati kedaluwarsa, sehingga fetcher Okta Anda harus mengembalikan token baru pada setiap panggilan alih-alih menyimpannya dalam cache tanpa batas waktu. CLI ant membaca ulang ANTHROPIC_IDENTITY_TOKEN_FILE pada setiap pertukaran, jadi segarkan file tersebut dengan timer untuk shell yang berjalan lama.
Pertukaran yang berhasil mengembalikan access_token yang dimulai dengan sk-ant-oat01- dan nilai expires_in dalam detik. Pada 400 invalid_grant, lihat Memecahkan masalah pertukaran yang gagal; penyebab paling umum di sisi Okta adalah ketidakcocokan issuer_url (harus menyertakan path /oauth2/<auth-server-id>; authorization server org Okta tidak dapat digunakan).
Beberapa aplikasi layanan di bawah authorization server Okta yang sama berbagi
issuer yang sama. Rule yang menghilangkan subject_prefix akan cocok dengan setiap
aplikasi layanan di server tersebut, sehingga tim mana pun yang dapat mendaftarkan satu
aplikasi dapat memperoleh token Anthropic terfederasi.
Kunci blok match pada rule ke cakupan tersempit yang sesuai dengan kasus penggunaan Anda:
subject_prefix ke Client ID lengkap aplikasi layanan tanpa * di akhir.audience yang Anda konfigurasikan pada authorization server sehingga token yang dicetak untuk audience yang berbeda akan ditolak.claims pada rule atau condition CEL.Was this page helpful?