Okta dapat bertindak sebagai penyedia identitas workload dengan menerbitkan token akses OIDC ke sebuah service application (aplikasi layanan) melalui grant OAuth 2.0 client_credentials. Workload Anda melakukan autentikasi ke Okta (biasanya dengan private_key_jwt, sehingga tidak ada rahasia bersama yang disimpan), menerima JSON Web Token (JWT) yang ditandatangani, dan menukarkan JWT tersebut dengan Anthropic untuk mendapatkan token akses berumur pendek.
URL issuer dari authorization server Okta memiliki bentuk 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 Okta org authorization server (endpoint /oauth2/v1/token tanpa ID authorization server di path) tidak dapat divalidasi oleh pihak eksternal karena Okta tidak memublikasikan kunci penandatanganan untuk token tersebut.
Ada banyak cara untuk mengonfigurasi dan melakukan autentikasi ke Okta yang berada di luar cakupan dokumentasi ini. Pastikan 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 persisnya bergantung pada konfigurasi org Okta dan versi admin console Anda. Langkah-langkah bernomor di bawah ini 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 penyiapan 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 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 authorization server.
Ikuti panduan penyiapan untuk mendaftarkan federation issuer, membuat service account Anthropic, dan membuat federation rule di Claude Console. Gunakan nilai-nilai khusus Okta berikut.
Federation issuer: Gunakan URL custom authorization server Okta Anda dan mode discovery. Anthropic membaca dokumen discovery .well-known/openid-configuration milik Okta dan mengambil JWKS dari jwks_uri yang diiklankan di dalamnya.
{
"name": "okta-prod",
"issuer_url": "https://acme.okta.com/oauth2/aus1a2b3c4d5e6f7g8h9",
"jwks_source": "discovery"
}Federation rule: Cocokkan pada klaim sub Okta, yang merupakan Client ID aplikasi layanan. Jika Anda mendefinisikan custom claim di Okta, Anda dapat mencocokkan berdasarkan 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 memperoleh JWT, lalu meneruskan JWT tersebut ke SDK Anthropic sebagai identity token.
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-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Claude"}],
)
print(message.content[0].text)Setiap tab SDK menunjukkan pola callable: SDK Anthropic memanggil penyedia identity token Anda lagi setiap kali token akses Anthropic mendekati masa kedaluwarsa, sehingga fetcher Okta Anda harus mengembalikan token baru pada setiap panggilan, bukan menyimpannya dalam cache tanpa batas waktu. CLI ant membaca ulang ANTHROPIC_IDENTITY_TOKEN_FILE pada setiap pertukaran, jadi perbarui file tersebut secara berkala dengan timer untuk shell yang berjalan lama.
Pertukaran yang berhasil mengembalikan access_token yang diawali dengan sk-ant-oat01- dan nilai expires_in dalam satuan detik. Jika terjadi 400 invalid_grant, lihat Memecahkan masalah pertukaran yang gagal; penyebab paling umum dari sisi Okta adalah ketidakcocokan issuer_url (harus menyertakan path /oauth2/<auth-server-id>; Okta org authorization server 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
aplikasi layanan dapat memperoleh token Anthropic yang difederasikan.
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 dibuat untuk audience berbeda akan ditolak.claims pada rule atau condition CEL.Was this page helpful?