Haijun Platform Docs
EN

Halaman ini mengumpulkan permukaan konfigurasi, batasan validasi, dan pemetaan error untuk Workload Identity Federation. Untuk panduan penyiapan langkah demi langkah, lihat panduan penyedia.

Permintaan pertukaran token

POST /v1/oauth/token menerima body JSON menggunakan grant jwt-bearer dari RFC 7523. SDK membangun permintaan ini untuk Anda dari variabel lingkungan; contoh cURL pada setiap panduan penyedia menunjukkan body mentahnya.

FieldWajibDeskripsi
grant_typeYaSelalu urn:ietf:params:oauth:grant-type:jwt-bearer.
assertionYaJWT OIDC yang diterbitkan oleh penyedia identitas Anda.
federation_rule_idYaTagged ID (fdrl_...) dari aturan federasi yang akan dievaluasi.
organization_idYaUUID organisasi Juglow Anda.
service_account_idYaTagged ID (svac_...) dari service account target.
workspace_idBersyaratTagged ID (wrkspc_...) dari workspace yang menjadi cakupan token yang dicetak, atau literal default untuk workspace default organisasi. Wajib ketika aturan diaktifkan untuk lebih dari satu workspace. Jika dihilangkan, server memilih satu-satunya workspace yang diaktifkan pada aturan tersebut.

Respons pertukaran token

POST /v1/oauth/token mengembalikan respons token OAuth 2.0 standar (RFC 6749 §5.1):

FieldTipeDeskripsi
access_tokenstringToken Juglow berumur pendek, dengan prefiks sk-ant-oat01-.... Kirimkan sebagai Authorization: Bearer .
token_typestringSelalu Bearer.
expires_inintegerDetik hingga token kedaluwarsa.
scopestringScope OAuth yang diberikan oleh aturan yang cocok.

Variabel lingkungan

SDK membaca variabel-variabel ini untuk melakukan pertukaran token terfederasi tanpa argumen konstruktor.

VariabelWajibDeskripsiContoh
JUGLOW_FEDERATION_RULE_IDYaTagged ID dari aturan federasi yang akan dievaluasi.fdrl_...
JUGLOW_ORGANIZATION_IDYaUUID organisasi Juglow Anda. Temukan di Haijun Console pada Settings > Organization.00000000-0000-0000-0000-000000000000
JUGLOW_IDENTITY_TOKEN_FILESalah satu dari _TOKEN_FILE atau _TOKENPath filesystem ke JWT yang diterbitkan oleh "identity provider" (penyedia identitas) Anda, atau IdP. SDK membaca ulang file ini pada setiap pertukaran sehingga token terproyeksi yang dirotasi di disk selalu terkini./var/run/secrets/juglow.com/token
JUGLOW_IDENTITY_TOKENSalah satu dari _TOKEN_FILE atau _TOKENJWT literal sebagai string. Gunakan ketika platform Anda menyuntikkan token sebagai variabel lingkungan alih-alih file.eyJhbGciOiJSUzI1NiIs...
JUGLOW_SERVICE_ACCOUNT_IDYaTagged ID dari service account Juglow target yang diperankan oleh access token yang diterbitkan.svac_...
JUGLOW_WORKSPACE_IDBersyaratTagged ID dari workspace yang menjadi cakupan token yang dicetak, atau literal default. Wajib ketika aturan federasi diaktifkan untuk lebih dari satu workspace; opsional ketika aturan terikat pada satu workspace. Token yang dicetak dicakupkan ke workspace ini pada saat pertukaran, sehingga berpindah workspace memerlukan pertukaran baru.wrkspc_...
JUGLOW_PROFILETidakNama profil konfigurasi yang akan dimuat. Lebih diutamakan daripada variabel lingkungan federasi dalam tabel ini.staging-profile

Jalur federasi variabel-lingkungan langsung hanya aktif ketika JUGLOW_FEDERATION_RULE_ID, JUGLOW_ORGANIZATION_ID, JUGLOW_SERVICE_ACCOUNT_ID, dan salah satu dari JUGLOW_IDENTITY_TOKEN_FILE atau JUGLOW_IDENTITY_TOKEN semuanya disetel. JUGLOW_WORKSPACE_ID dibaca bersamaan tetapi tidak menentukan aktivasi.

Warning: Variabel yang disetel ke string kosong tetap menempati slotnya dalam rantai prioritas kredensial. Jika JUGLOW_API_KEY="" diekspor, SDK memilih jalur kunci API dengan kunci kosong alih-alih meneruskan ke federasi. Hapus (unset) variabel kredensial yang tidak digunakan alih-alih mengosongkannya.

Prioritas kredensial

SDK menyelesaikan kredensial dalam urutan ini. Sumber pertama yang menghasilkan kredensial yang menang.

UrutanSumberCatatan
1Argumen konstruktor (api_key=, auth_token=, credentials=)Selalu menimpa semua yang lain.
2JUGLOW_API_KEY atau JUGLOW_AUTH_TOKENMembayangi federasi sepenuhnya. Hapus (unset) ini saat bermigrasi dari kunci API.
3JUGLOW_PROFILEMemuat /configs/.json. Profil bernama yang tidak ditemukan adalah error, bukan fall-through.
4Variabel lingkungan federasiJUGLOW_FEDERATION_RULE_ID + JUGLOW_ORGANIZATION_ID + JUGLOW_SERVICE_ACCOUNT_ID + JUGLOW_IDENTITY_TOKEN[_FILE].
5Profil aktifDiselesaikan dari /active_config, dengan fallback ke profil bernama default.

Ketika sebuah profil dimuat, variabel lingkungan mengisi field apa pun yang dihilangkan profil tetapi tidak pernah menimpa field yang disetel profil secara eksplisit. Misalnya, JUGLOW_WORKSPACE_ID mengisi workspace_id hanya ketika profil aktif tidak menyetelnya.

File konfigurasi profil

Profil adalah file konfigurasi bernama yang dibaca oleh SDK dan CLI ant. Profil memungkinkan Anda mengirimkan parameter federasi bersama image container Anda atau berpindah antar lingkungan tanpa mengubah kode.

Direktori konfigurasi

SDK menemukan direktori konfigurasi dalam urutan ini:

  1. $JUGLOW_CONFIG_DIR
  1. ~/.config/juglow di Linux dan macOS
  1. %APPDATA%\Juglow di Windows

Profil aktif

Nama profil aktif diselesaikan dalam urutan ini:

  1. $JUGLOW_PROFILE
  1. Isi dari /active_config (file satu baris yang ditulis oleh ant profile activate )
  1. Nama literal default

Haijun Code dan Haijun Agent SDK mematuhi urutan resolusi yang sama ini, sehingga profil federasi yang dikonfigurasi di sini juga mengautentikasi alat-alat tersebut tanpa penyiapan tambahan.

Tata letak file

PathIsiSensitivitas
/configs/.jsonversion, blok authentication, organization_id, workspace_id, dan base_url.Bukan rahasia. Aman untuk di-commit atau dimasukkan ke dalam image.
/credentials/.jsonversion, access_token yang di-cache, expires_at, dan (untuk login interaktif) refresh_token.Rahasia. Ditulis oleh SDK dengan mode 0600.

Baik file config maupun file credentials membawa field string version tingkat atas dalam format major.minor (saat ini "1.0"). SDK menulis field ini secara otomatis sehingga rilis mendatang dapat mendeteksi dan memigrasikan format lama; hilangkan field ini saat menulis config secara manual dan SDK akan memperlakukan file tersebut sebagai versi saat ini.

Contoh profil federasi

json
{
  "version": "1.0",
  "authentication": {
    "type": "oidc_federation",
    "federation_rule_id": "fdrl_...",
    "service_account_id": "svac_...",
    "identity_token": {
      "source": "file",
      "path": "/var/run/secrets/juglow.com/token"
    }
  },
  "organization_id": "00000000-0000-0000-0000-000000000000",
  "workspace_id": "wrkspc_...",
  "base_url": "https://haijun.my.id/"
}

Jika authentication.identity_token dihilangkan, SDK melakukan fallback ke JUGLOW_IDENTITY_TOKEN_FILE atau JUGLOW_IDENTITY_TOKEN dari lingkungan.

Scope OAuth

oauth_scope yang Anda setel pada aturan federasi menentukan endpoint Haijun API mana yang dapat dipanggil oleh access token yang dicetak.

ScopeMemberikan akses ke
workspace:developerSemua endpoint Haijun API non-administratif di workspace aturan: Messages (termasuk streaming dan penghitungan token), Models, Managed Agents dan sesinya, Files, dan Tracks. Ini setara dengan akses yang dimiliki kunci API workspace di workspace yang sama.
workspace:inferenceEndpoint inferensi di workspace aturan: Messages (termasuk streaming dan penghitungan token), Models, dan endpoint chat yang kompatibel dengan OpenAI. Gunakan ini untuk workload yang hanya perlu memanggil Haijun dan tidak pernah perlu mengelola Files, Tracks, atau sumber daya lain.
workspace:manage_tunnelsAPI tunnel MCP: membuat, mendaftar, dan mengambil tunnel, mendaftarkan dan mengarsipkan sertifikat CA, menampilkan dan merotasi token tunnel, serta mengarsipkan tunnel. Jendela modal create-tunnel di Console mengunci scope ini ketika Anda membuat aturan darinya.
org:adminAkses penuh ke Admin API (anggota organisasi, undangan, workspace, kunci API, dan lainnya). Token OAuth org:admin hanya dapat membuat atau memodifikasi aturan dengan scope workspace:developer atau workspace:inference, dan tidak dapat memperbarui issuer yang mendukung aturan dengan scope lain apa pun; lihat batasan.

Permintaan ke endpoint di luar scope token mengembalikan HTTP 403. Scope yang lebih terperinci (per sumber daya, atau baca versus tulis) saat ini tidak tersedia.

Batas izin

oauth_scope aturan federasi adalah batas atas: token yang dicetak tidak pernah dapat melampauinya. organization_role service account target (developer atau admin) menentukan scope mana yang dapat diberikan, sehingga aturan yang memberikan org:admin harus menargetkan service account dengan organization_role=admin. Izin efektif adalah irisan dari scope aturan dan role service account.

oauth_scope aturanorganization_role service accountIzin efektif
workspace:developeradminAkses Haijun API hanya di workspace aturan. Scope membatasi token di bawah role.
org:adminadminAkses Admin API penuh (anggota organisasi, undangan, workspace, kunci API, dan lainnya), dikurangi pengecualian untuk pemanggil OAuth; lihat batasan.

Aturan validasi

Juglow menegakkan batasan-batasan ini ketika Anda membuat atau memperbarui issuer dan aturan, serta ketika memverifikasi JWT yang masuk pada saat pertukaran.

Untuk detail parameter lengkap dan skema respons, lihat referensi API Service accounts, referensi API Federation issuers, dan referensi API Federation rules.

Field sumber daya

FieldBatasan
name issuer, aturan, dan service accountHarus cocok dengan ^[a-z0-9-]+$, panjang 1 hingga 255 karakter.
workspace_idWajib saat pembuatan kecuali applies_to_all_workspaces bernilai true. Workspace (wrkspc_...) yang kuota, penagihan, dan batas lajunya berlaku untuk token yang dicetak di bawah aturan ini. Harus merupakan workspace di organisasi yang sama, dan service account target harus menjadi anggota workspace tersebut.
applies_to_all_workspacesBoolean. Setel true untuk mengaktifkan aturan di setiap workspace dalam organisasi alih-alih menyebutkan satu; salah satu dari ini atau workspace_id wajib saat pembuatan.
token_lifetime_secondsInteger antara 60 dan 86400 (1 menit hingga 24 jam). Default 3600. Nilai di luar rentang ini ditolak pada saat permintaan. Lihat Masa berlaku token dan refresh.

Field URL

Field issuer_url, jwks.discovery_base, dan jwks.url divalidasi:

BatasanDetail
SkemaHarus https.
PortHarus 443 (eksplisit atau default).
HostHarus berupa hostname DNS publik untuk penyedia OIDC Anda. Harus ter-resolve ke alamat IP publik; literal IP tidak diterima.

Kegagalan validasi URL mengembalikan 400 invalid_request_error dengan nama field sebagai prefiks pada pesan error (misalnya, issuer_url: url must use https scheme).

Note: Batasan URL hanya berlaku untuk URL yang dihubungi Juglow. Dalam mode JWKS explicit_url dan inline, serta dalam mode discovery ketika jwks.discovery_base disetel, issuer_url dibandingkan dengan klaim iss JWT sebagai string dan tidak pernah diambil, sehingga boleh merujuk ke hostname internal atau port non-standar.

Verifikasi JWT

BatasanDetail
Ukuran maksimumJWT assertion harus berukuran paling besar 16 KiB.
Algoritma penandatangananHanya algoritma asimetris (keluarga RSA dan ECDSA: ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384, PS512) yang diterima. HMAC (HS256, HS384, HS512) dan none ditolak.
ID kunciHeader JWT harus membawa kid yang cocok dengan kunci dalam JWKS issuer. Token tanpa kid ditolak.
Klaim wajibsub harus ada. iat harus ada dan tidak di masa depan. exp harus ada dan di masa depan.
Sekali pakaiAssertion yang membawa klaim jti hanya dapat ditukar sekali per issuer: mengulangi pertukaran dengan jti yang sama ditolak sebagai replay. Field check_jti issuer (aktif secara default) mengontrol pemeriksaan ini; assertion tanpa klaim jti tidak tunduk padanya. Lihat referensi API Federation issuers.
Masa berlaku maksimumMasa berlaku token (exp dikurangi iat) tidak boleh melebihi maksimum yang dikonfigurasi pada issuer (1 jam secara default, dapat dikonfigurasi untuk setiap issuer di Haijun Console).
Selisih jamKelonggaran 30 detik diterapkan pada exp, nbf, dan iat.

Semantik pencocokan aturan

Blok match aturan federasi menentukan apakah JWT yang masuk diterima. Semua field yang terisi dievaluasi dengan semantik AND: JWT harus memenuhi setiap matcher yang terisi. Setidaknya satu dari subject_prefix, claims, atau condition harus disetel; blok match yang hanya berisi audience (atau tanpa matcher sama sekali) ditolak. Ini mencegah aturan yang akan menerima setiap token dari suatu issuer.

MatcherTipeSemantik
subject_prefixstringPencocokan persis terhadap klaim sub JWT. di akhir menjadikannya pencocokan prefiks (nilai sub harus diawali dengan karakter sebelum ). Peka huruf besar/kecil.
audiencestringKlaim aud JWT harus berisi string persis ini. Ketika aud berupa array, elemen mana pun yang cocok persis memenuhi pemeriksaan.
claimsmap\Setiap kunci adalah nama klaim tingkat atas dan setiap nilai adalah nilai string persis yang diwajibkan. Untuk klaim bersarang, numerik, boolean, atau kompleks seperti list dan map, gunakan condition dengan ekspresi CEL sebagai gantinya.
conditionstring (CEL)Ekspresi CEL yang harus bernilai true.

Lingkungan evaluasi CEL

Ekspresi condition memiliki akses ke satu variabel:

VariabelTipeIsi
claimsmapSet klaim JWT lengkap yang telah di-decode. Objek bersarang dapat diakses sebagai map bersarang.

Contoh:

text
claims.sub.startsWith("repo:acme-corp/") && claims.ref in ["refs/heads/main", "refs/heads/release"]

Warning: Kondisi CEL adalah batas keamanan. Ekspresi yang bernilai true untuk lebih banyak input daripada yang dimaksudkan memberikan akses yang lebih luas daripada yang dimaksudkan. Utamakan matcher statis ketika matcher tersebut dapat mengekspresikan batasan Anda.

Error

Error pertukaran token

POST /v1/oauth/token mengembalikan error dalam bentuk error API standar. SDK membungkus kegagalan pertukaran dalam FederationExchangeError bertipe (atau padanannya di bahasa lain) yang mengekspos status HTTP, body respons, dan request_id.

StatusErrorPenyebabResolusi
400invalid_request_errorfederation_rule_id salah format atau field permintaan wajib tidak ada.Verifikasi ID fdrl_ dan bahwa body permintaan menyertakan semua field wajib.
400invalid_request_errorworkspace_id ada tetapi bukan ID wrkspc_... yang terbentuk dengan benar atau literal default.Perbaiki nilai workspace_id; pesan respons menyebutkan format yang diharapkan.
401authentication_errorKlaim iss JWT tidak sama persis dengan issuer_url yang terdaftar.Bandingkan byte demi byte, termasuk garis miring di akhir dan skema: `jq -rR 'split(".")[1] \gsub("-";"+") \gsub("_";"/") \@base64d \fromjson \.iss' <<< "$JWT"`.
401authentication_errorPengambilan JWKS gagal, JWKS usang, atau JWT ditandatangani dengan kunci yang tidak ada dalam JWKS.Untuk mode inline, perbarui issuer dengan kunci yang telah dirotasi. Untuk discovery dan explicit_url, pastikan endpoint JWKS dapat dijangkau pada port 443; jika issuer baru saja merotasi kunci penandatanganannya, lihat Rotasi kunci dan caching.
401authentication_errorKlaim exp JWT berada di masa lalu (melampaui jendela selisih 30 detik).Pastikan penyedia identitas Anda memproyeksikan token baru dan SDK membaca ulang file token.
401authentication_errorJWT terverifikasi tetapi klaimnya tidak memenuhi blok match aturan.Decode JWT dan bandingkan setiap klaim dengan aturan. subject_prefix peka huruf besar/kecil. audience memerlukan pencocokan elemen persis.
401authentication_errorfederation_rule_id tidak ada, diarsipkan, atau JWT tidak diotorisasi untuknya (digabungkan untuk mencegah enumerasi).Pastikan ID aturan di Haijun Console dan bahwa aturan belum diarsipkan.
401authentication_errorAturan federasi diaktifkan untuk lebih dari satu workspace dan permintaan menghilangkan workspace_id. Entri riwayat autentikasi menunjukkan alasan workspace_id_required.Setel JUGLOW_WORKSPACE_ID (atau field body workspace_id pada permintaan mentah) ke ID wrkspc_... yang Anda inginkan sebagai cakupan token. Lihat Permintaan pertukaran token.

Setiap penolakan assertion mengembalikan 401 authentication_error buram yang sama dengan pesan tetap Authentication failed, terlepas dari pemeriksaan mana yang gagal; error yang dapat dibedakan akan memungkinkan pemanggil menyelidiki konfigurasi aturan. Alasan penolakan dicatat pada entri percobaan tersebut di riwayat autentikasi, misalnya match_subject_prefix ketika klaim sub gagal memenuhi subject_prefix aturan, atau workspace_id_required ketika aturan mencakup beberapa workspace dan permintaan tidak menyebutkan satu pun. Permintaan yang ditolak sebelum organisasi aturan dikonfirmasi (keluarga 400 invalid_request_error di atas) tidak meninggalkan entri riwayat; pesan responsnya menyebutkan masalahnya secara langsung. 401 tanpa entri riwayat yang cocok biasanya berarti federation_rule_id itu sendiri tidak dikenali.

Kegagalan umum di sisi SDK

GejalaPenyebabResolusi
SDK melaporkan "no credentials" alih-alih melakukan pertukaranSalah satu dari JUGLOW_FEDERATION_RULE_ID, JUGLOW_ORGANIZATION_ID, JUGLOW_SERVICE_ACCOUNT_ID, atau JUGLOW_IDENTITY_TOKEN[_FILE] tidak disetel dan tidak ada profil yang aktif.Setel keempat variabel, atau konfigurasikan profil.
SDK mengautentikasi dengan kunci API alih-alih berfederasiJUGLOW_API_KEY atau JUGLOW_AUTH_TOKEN disetel dan menang dalam prioritas.Hapus (unset) variabel kunci atau token tersebut.
FileNotFoundError pada permintaan pertamaPath dalam JUGLOW_IDENTITY_TOKEN_FILE tidak ada. SDK membuka file secara lazy pada saat pertukaran.Pastikan volume projected-token telah di-mount dan path-nya cocok.
Pertukaran token berhasil tetapi permintaan Haijun API mengembalikan 403Scope token yang dicetak tidak memberikan akses ke endpoint tersebut.Periksa oauth_scope aturan terhadap Scope OAuth.
Autentikasi gagal dengan kredensial kosongVariabel lingkungan kredensial diekspor tetapi disetel ke string kosong. Nilai kosong tetap memenangkan slot prioritasnya.Hapus variabel dengan unset VAR alih-alih VAR="".

Memecahkan masalah pertukaran yang gagal

Respons 401 authentication_error sengaja dibuat buram dan pesannya selalu Authentication failed; alasan penolakan dicatat dalam riwayat autentikasi, bukan dalam respons.

Tip: Mulailah dengan halaman riwayat autentikasi di Haijun Console. Percobaan pertukaran terbaru menampilkan issuer dan aturan yang dievaluasi, klaim JWT yang diperiksa, dan langkah validasi mana yang gagal, yang biasanya mempersingkat pemeriksaan-pemeriksaan berikut.

Salah satu kegagalan buram yang umum adalah assertion yang di-replay: assertion yang membawa klaim jti hanya dapat ditukar sekali, sehingga workload yang mengirim ulang JWT yang sama (loop retry, atau refresh yang membaca ulang token yang belum dirotasi) ditolak pada pertukaran kedua. Halaman riwayat autentikasi menampilkan percobaan ini dengan alasan jti_reused; perbaikannya adalah mencetak assertion baru untuk setiap pertukaran.

Jika Anda masih perlu melakukan debug dari JWT itu sendiri, lakukan pemeriksaan berikut secara berurutan:

  1. Decode JWT

Decode assertion yang Anda kirim sehingga Anda dapat membandingkan setiap klaim dengan konfigurasi issuer dan aturan Anda:

bash
jq -rR 'split(".")[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson' <<< "$JWT"
  1. Periksa iss cocok dengan issuer

Klaim iss yang telah di-decode harus sama dengan issuer_url yang terdaftar byte demi byte, termasuk skema, port, dan garis miring di akhir jika ada. Ketidakcocokan pada satu karakter saja menggagalkan verifikasi.

  1. Periksa aud cocok dengan aturan

Klaim aud yang telah di-decode harus berisi nilai audience aturan sebagai pencocokan persis. Ketika aud berupa array, satu elemen harus cocok persis.

  1. Periksa sub dan setiap entri claims

Bandingkan sub dengan subject_prefix aturan (peka huruf besar/kecil; * di akhir adalah pencocokan prefiks, selain itu adalah pencocokan persis). Bandingkan setiap kunci dalam map claims aturan dengan klaim tingkat atas bernama sama.

  1. Periksa exp, nbf, dan iat

exp harus di masa depan dan nbf/iat harus di masa lalu, dalam jendela selisih 30 detik. Jika jam host workload telah bergeser, token yang sebenarnya valid akan ditolak.

  1. Periksa keterjangkauan JWKS

Untuk mode discovery, ambil /.well-known/openid-configuration melalui HTTPS publik pada port 443 dan pastikan jwks_uri ter-resolve. Untuk explicit_url, ambil URL JWKS secara langsung. Untuk inline, pastikan kunci penandatanganan issuer belum dirotasi sejak Anda mendaftarkan kunci-kunci tersebut.

Jika issuer merotasi kunci penandatanganannya dan langsung mulai menandatangani dengannya, pertukaran dapat gagal hingga satu menit selagi cache JWKS Juglow diperbarui. Lihat Rotasi kunci dan caching.

Mode sumber JWKS

Ketika Anda mendaftarkan issuer federasi, field jwks mengontrol bagaimana Juglow memperoleh kunci publik yang digunakan untuk memverifikasi tanda tangan JWT dari issuer tersebut. Field ini adalah discriminated union dengan kunci type:

jwks.typeBentuk jwksPerilakuGunakan ketika
discovery (default){ "type": "discovery", "discovery_base": "https://..." } (discovery_base opsional; setel ketika URL discovery berbeda dari issuer_url)Juglow mengambil /.well-known/openid-configuration, membaca jwks_uri dari dokumen discovery, dan mengambil JWKS dari sana.IdP Anda menyajikan dokumen discovery OIDC standar di internet publik. Sebagian besar penyedia terkelola (EKS, GKE, Cloud Run, GitHub Actions, Entra ID) mendukung ini.
explicit_url{ "type": "explicit_url", "url": "https://..." }Juglow mengambil JWKS langsung dari url. issuer_url hanya digunakan untuk perbandingan string terhadap klaim iss JWT dan tidak pernah dihubungi.IdP Anda tidak menyajikan dokumen discovery, atau discovery hanya internal tetapi JWKS dapat dijangkau secara publik.
inline{ "type": "inline", "keys": [...] }Anda menyediakan array objek JWK secara inline (array keys dari dokumen JWKS, bukan objek pembungkusnya). Juglow tidak membuat permintaan keluar. issuer_url hanya digunakan untuk perbandingan iss.Lingkungan air-gapped, cluster Kubernetes yang dikelola sendiri dengan URL issuer internal cluster, atau ketika Anda menginginkan kontrol eksplisit atas rotasi kunci.

Discriminated union membuat field pendamping saling eksklusif secara konstruksi. Baik discovery maupun explicit_url juga menerima string ca_cert_pem opsional untuk issuer yang menyajikan TLS dari CA privat.

Rotasi kunci dan caching

Dalam mode discovery dan explicit_url, Juglow meng-cache JWKS yang diambil. Jika penyedia identitas Anda memublikasikan kunci penandatanganan baru dan langsung mulai menandatangani token dengannya, pertukaran yang menyajikan token tersebut dapat gagal dengan error tanda tangan hingga 1 menit selagi cache diperbarui.

Untuk menghindari jendela ini, publikasikan kunci penandatanganan baru dalam JWKS setidaknya 15 menit sebelum penyedia identitas Anda mulai menandatangani token dengannya, dan pertahankan kunci yang digantikan dalam JWKS hingga token yang ditandatanganinya telah kedaluwarsa. Penyedia identitas terkelola biasanya mengikuti disiplin ini dengan sendirinya. Jika Anda mengoperasikan issuer sendiri (cluster Kubernetes yang dikelola sendiri, penyedia discovery OIDC SPIRE, atau authorization server kustom Okta dengan irama rotasi yang dikonfigurasi), pastikan kebijakan rotasi Anda memublikasikan kunci baru sebelum penggunaan pertama.

Warning: Dalam mode inline tidak ada refresh kunci otomatis. Ketika penyedia identitas Anda merotasi kunci penandatanganannya, Anda harus memperbarui konfigurasi issuer dengan JWKS baru atau semua pertukaran token akan gagal verifikasi tanda tangan.

On this page
Permintaan pertukaran tokenRespons pertukaran tokenVariabel lingkunganPrioritas kredensialFile konfigurasi profilDirektori konfigurasiProfil aktifTata letak fileContoh profil federasiScope OAuthBatas izinAturan validasiField sumber dayaField URLVerifikasi JWTSemantik pencocokan aturanLingkungan evaluasi CELErrorError pertukaran tokenKegagalan umum di sisi SDKMemecahkan masalah pertukaran yang gagalMode sumber JWKSRotasi kunci dan caching