Halaman ini berlaku untuk Apigee dan Apigee hybrid.
Lihat dokumentasi Apigee Edge.
Apa
Memverifikasi JWT yang ditandatangani atau mendekripsi dan memverifikasi JWT terenkripsi yang diterima dari klien atau sistem lain. Kebijakan ini juga mengekstrak klaim ke dalam variabel konteks sehingga kebijakan atau kondisi berikutnya dapat memeriksa nilai tersebut untuk membuat keputusan otorisasi atau pemilihan rute. Lihat ringkasan kebijakan JWS dan JWT untuk pengantar mendetail.
Kebijakan ini adalah Kebijakan standar dan dapat di-deploy ke jenis lingkungan apa pun. Untuk mengetahui informasi tentang jenis kebijakan dan ketersediaan dengan setiap jenis lingkungan, lihat Jenis kebijakan.
Saat kebijakan ini dijalankan, dalam kasus JWT yang ditandatangani, Apigee akan memverifikasi tanda tangan JWT menggunakan kunci verifikasi yang diberikan. Dalam kasus JWT terenkripsi, Apigee mendekripsi JWT menggunakan kunci dekripsi. Dalam kedua kasus tersebut, Apigee kemudian memverifikasi bahwa JWT valid sesuai dengan waktu habis masa berlaku dan tidak sebelum jika ada. Kebijakan ini juga dapat memverifikasi nilai klaim tertentu di JWT, seperti subjek, penerbit, audiens, atau nilai klaim tambahan.
Jika JWT diverifikasi dan valid, semua klaim yang terdapat dalam JWT akan diekstrak ke dalam variabel konteks untuk digunakan oleh kebijakan atau kondisi berikutnya, dan permintaan diizinkan untuk dilanjutkan. Jika tanda tangan JWT tidak dapat diverifikasi atau jika JWT tidak valid karena salah satu stempel waktu, semua pemrosesan akan berhenti dan error akan ditampilkan dalam respons.
Untuk mempelajari bagian-bagian JWT dan cara dienkripsi serta ditandatangani, lihat RFC7519.
Solusi
Apakah kebijakan memverifikasi JWT yang ditandatangani atau dienkripsi bergantung pada elemen yang Anda gunakan untuk menentukan algoritma yang memverifikasi JWT:
- Jika Anda menggunakan elemen
<Algorithm>
, kebijakan akan memverifikasi JWT yang ditandatangani. - Jika Anda menggunakan elemen
<Algorithms>
, kebijakan akan memverifikasi JWT terenkripsi.
Video
Tonton video singkat untuk mempelajari cara memverifikasi tanda tangan di JWT.
Memverifikasi JWT yang Ditandatangani
Bagian ini menjelaskan cara memverifikasi JWT yang ditandatangani. Untuk JWT yang ditandatangani,
gunakan elemen <Algorithm>
untuk menentukan algoritma untuk menandatangani kunci.
Contoh untuk JWT yang ditandatangani
Contoh berikut mengilustrasikan cara memverifikasi JWT yang ditandatangani.
Algoritma HS256
Contoh kebijakan ini memverifikasi JWT yang ditandatangani dengan algoritma enkripsi HS256, HMAC menggunakan checksum SHA-256. JWT diteruskan dalam permintaan proxy menggunakan parameter formulir bernama
jwt
. Kunci ini terdapat dalam variabel bernama private.secretkey
.
Tonton video di atas untuk melihat contoh lengkap, termasuk cara mengajukan permintaan untuk kebijakan tersebut.
Konfigurasi kebijakan mencakup informasi yang diperlukan Apigee untuk mendekode dan mengevaluasi JWT, seperti tempat menemukan JWT (dalam variabel alur yang ditentukan dalam elemen Sumber), algoritma penandatanganan yang diperlukan, tempat menemukan kunci rahasia (disimpan dalam variabel alur Apigee, yang dapat diambil dari KVM Apigee, misalnya), dan kumpulan klaim yang diperlukan beserta nilainya.
<VerifyJWT name="JWT-Verify-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Algorithm>HS256</Algorithm> <Source>request.formparam.jwt</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <SecretKey encoding="base64"> <Value ref="private.secretkey"/> </SecretKey> <Subject>monty-pythons-flying-circus</Subject> <Issuer>urn://apigee-edge-JWT-policy-test</Issuer> <Audience>fans</Audience> <AdditionalClaims> <Claim name="show">And now for something completely different.</Claim> </AdditionalClaims> </VerifyJWT>
Kebijakan menulis output-nya ke variabel konteks sehingga kebijakan atau kondisi berikutnya di proxy API dapat memeriksa nilai tersebut. Lihat Variabel alur untuk mengetahui daftar variabel yang ditetapkan oleh kebijakan ini.
Algoritma RS256
Contoh kebijakan ini memverifikasi JWT yang ditandatangani dengan algoritma RS256. Untuk memverifikasi,
Anda harus memberikan kunci publik. JWT diteruskan dalam permintaan proxy menggunakan parameter formulir
bernama jwt
. Kunci publik terdapat dalam variabel bernama public.publickey
.
Tonton video di atas untuk melihat contoh lengkap, termasuk cara mengajukan permintaan untuk kebijakan tersebut.
Lihat Referensi elemen untuk mengetahui detail persyaratan dan opsi untuk setiap elemen dalam contoh kebijakan ini.
<VerifyJWT name="JWT-Verify-RS256"> <Algorithm>RS256</Algorithm> <Source>request.formparam.jwt</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <PublicKey> <Value ref="public.publickey"/> </PublicKey> <Subject>apigee-seattle-hatrack-montage</Subject> <Issuer>urn://apigee-edge-JWT-policy-test</Issuer> <Audience>urn://c60511c0-12a2-473c-80fd-42528eb65a6a</Audience> <AdditionalClaims> <Claim name="show">And now for something completely different.</Claim> </AdditionalClaims> </VerifyJWT>
Untuk konfigurasi di atas, JWT dengan header ini …
{ "typ" : "JWT", "alg" : "RS256" }
Dan payload ini …
{ "sub" : "apigee-seattle-hatrack-montage", "iss" : "urn://apigee-edge-JWT-policy-test", "aud" : "urn://c60511c0-12a2-473c-80fd-42528eb65a6a", "show": "And now for something completely different." }
… akan dianggap valid, jika tanda tangan dapat diverifikasi dengan kunci publik yang disediakan.
JWT dengan header yang sama, tetapi dengan payload ini …
{ "sub" : "monty-pythons-flying-circus", "iss" : "urn://apigee-edge-JWT-policy-test", "aud" : "urn://c60511c0-12a2-473c-80fd-42528eb65a6a", "show": "And now for something completely different." }
… akan ditentukan tidak valid, meskipun tanda tangan dapat diverifikasi, karena klaim "sub" yang disertakan dalam JWT tidak cocok dengan nilai elemen "Subject" yang diperlukan seperti yang ditentukan dalam konfigurasi kebijakan.
Kebijakan menulis output-nya ke variabel konteks sehingga kebijakan atau kondisi berikutnya di proxy API dapat memeriksa nilai tersebut. Lihat Variabel alur untuk mengetahui daftar variabel yang ditetapkan oleh kebijakan ini.
Contoh di atas menggunakan elemen <Algorithm>
, sehingga memverifikasi JWT
yang ditandatangani. Elemen <PrivateKey>
menentukan kunci yang digunakan untuk menandatangani JWT. Ada
juga elemen penting lainnya. Mana yang Anda gunakan bergantung pada algoritma yang ditentukan oleh
nilai <Algorithm>
, seperti yang dijelaskan di bagian berikutnya.
Menetapkan elemen kunci untuk memverifikasi JWT yang ditandatangani
Elemen berikut menentukan kunci yang digunakan untuk memverifikasi JWT yang ditandatangani:
Elemen yang Anda gunakan bergantung pada algoritma yang dipilih, seperti yang ditunjukkan dalam tabel berikut:
Algoritme | Elemen utama | |
---|---|---|
HS* |
<SecretKey encoding="base16|hex|base64|base64url"> <Value ref="private.secretkey"/> </SecretKey> |
|
RS*, ES*, PS* | <PublicKey> <Value ref="rsa_public_key_or_value"/> </PublicKey> atau: <PublicKey> <Certificate ref="signed_cert_val_ref"/> </PublicKey> atau: <PublicKey> <JWKS ref="jwks_val_or_ref"/> </PublicKey> |
|
*Untuk mengetahui persyaratan kunci selengkapnya, lihat Tentang algoritma enkripsi tanda tangan. |
Memverifikasi JWT terenkripsi
Bagian ini menjelaskan cara memverifikasi JWT terenkripsi. Untuk JWT terenkripsi, gunakan elemen
<Algorithms>
untuk menentukan algoritma untuk menandatangani kunci dan konten.
Contoh untuk JWT terenkripsi
Contoh berikut menunjukkan cara memverifikasi JWT terenkripsi (dengan <Type>
ditetapkan ke Encrypted
), dengan:
- Kunci dienkripsi dengan algoritma RSA-OAEP-256.
- Konten dienkripsi dengan algoritma A128GCM.
<VerifyJWT name="vjwt-1"> <Algorithms> <Key>RSA-OAEP-256</Key> <Content>A128GCM</Content> </Algorithms> <Type>Encrypted</Type> <PrivateKey> <Value ref="private.rsa_privatekey"/> </PrivateKey> <Subject>subject@example.com</Subject> <Issuer>urn://apigee</Issuer> <AdditionalHeaders> <Claim name="moniker">Harvey</Claim> </AdditionalHeaders> <TimeAllowance>30s</TimeAllowance> <Source>input_var</Source> </VerifyJWT>
Contoh di atas menggunakan elemen <Algorithms>
, sehingga memverifikasi JWT terenkripsi. Elemen <PrivateKey>
menentukan kunci yang akan digunakan untuk mendekripsi JWT. Ada
juga elemen penting lainnya. Mana yang Anda gunakan bergantung pada algoritma yang ditentukan oleh
nilai <Algorithms>
, seperti yang dijelaskan di bagian berikutnya.
Menetapkan elemen kunci untuk memverifikasi JWT terenkripsi
Elemen berikut menentukan kunci yang digunakan untuk memverifikasi JWT terenkripsi:
Elemen yang Anda gunakan bergantung pada algoritma enkripsi kunci yang dipilih, seperti yang ditunjukkan dalam tabel berikut:
Algoritme | Elemen utama |
---|---|
RSA-OAEP-256 | <PrivateKey> <Value ref="private.rsa_privatekey"/> </PrivateKey> Catatan: Variabel yang Anda tentukan harus me-resolve ke kunci pribadi RSA dalam bentuk yang dienkode PEM. |
|
<PrivateKey> <Value ref="private.ec_privatekey"/> </PrivateKey> Catatan: Variabel yang Anda tentukan harus me-resolve ke kunci pribadi kurva elips dalam bentuk yang dienkode PEM. |
|
<SecretKey encoding="base16|hex|base64|base64url"> <Value ref="private.flow-variable-name-here"/> </SecretKey> |
|
<PasswordKey> <Value ref="private.password-key"/> <SaltLength> <PBKDF2Iterations> </PasswordKey> |
dir | <DirectKey> <Value encoding="base16|hex|base64|base64url" ref="private.directkey"/> </DirectKey> |
Untuk mengetahui persyaratan kunci selengkapnya, lihat Tentang algoritma enkripsi tanda tangan.
Referensi elemen
Referensi kebijakan menjelaskan elemen dan atribut kebijakan Verifikasi JWT.
Catatan: Konfigurasi akan sedikit berbeda bergantung pada algoritma enkripsi yang Anda gunakan. Lihat Contoh untuk contoh yang menunjukkan konfigurasi untuk kasus penggunaan tertentu.
Atribut yang berlaku untuk elemen tingkat atas
<VerifyJWT name="JWT" continueOnError="false" enabled="true" async="false">
Atribut berikut bersifat umum untuk semua elemen induk kebijakan.
Atribut | Deskripsi | Default | Presence |
---|---|---|---|
nama |
Nama internal kebijakan. Karakter yang dapat Anda gunakan dalam nama dibatasi untuk:
A-Z0-9._\-$ % . Namun, UI Apigee menerapkan batasan tambahan, seperti menghapus karakter yang bukan alfanumerik secara otomatis.
Secara opsional, gunakan elemen |
T/A | Wajib |
continueOnError |
Tetapkan ke false untuk menampilkan error saat kebijakan gagal. Perilaku ini wajar terjadi untuk sebagian besar kebijakan.
Tetapkan ke |
false | Opsional |
diaktifkan |
Tetapkan ke true untuk menerapkan kebijakan.
Tetapkan ke |
benar | Opsional |
asinkron | Atribut ini tidak digunakan lagi. | false | Tidak digunakan lagi |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Gunakan selain atribut nama untuk memberi label pada kebijakan di editor proxy UI pengelolaan dengan nama bahasa alami yang berbeda.
Default | Jika Anda menghapus elemen ini, nilai atribut nama kebijakan akan digunakan. |
Presence | Opsional |
Jenis | String |
<Algorithm>
<Algorithm>HS256</Algorithm>
Menentukan algoritma kriptografi yang digunakan untuk memverifikasi token. Gunakan elemen <Algorithm>
untuk memverifikasi JWT yang ditandatangani.
Algoritma RS*/PS*/ES* menggunakan pasangan kunci publik/rahasia, sedangkan algoritma HS* menggunakan rahasia bersama. Lihat juga Tentang algoritma enkripsi tanda tangan.
Anda dapat menentukan beberapa nilai yang dipisahkan koma. Misalnya "HS256, HS512" atau "RS256, PS256". Namun, Anda tidak dapat menggabungkan algoritma HS* dengan algoritma lainnya atau algoritma ES* dengan algoritma lainnya karena algoritma tersebut memerlukan jenis kunci tertentu. Anda dapat menggabungkan algoritma RS* dan PS*.
Default | T/A |
Presence | Wajib |
Jenis | String nilai yang dipisahkan koma |
Nilai yang valid | HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384, PS512 |
<Algorithms>
<Algorithms> <Key>key-algorithm</Key> <Content>content-algorithm</Content> </Algorithm>
Gunakan elemen <Algorithms>
untuk memverifikasi JWT terenkripsi. Elemen ini
menentukan algoritma kriptografi untuk enkripsi kunci yang harus digunakan saat
JWT terenkripsi dibuat. Secara opsional, kode ini juga menentukan algoritma
untuk enkripsi konten.
Default | T/A |
Presence | Wajib, saat memverifikasi JWT terenkripsi |
Jenis | Kompleks |
Elemen turunan dari <Algorithms>
Tabel berikut memberikan deskripsi tingkat tinggi tentang elemen turunan
<Algorithms>
:
Elemen Turunan | Wajib? | Deskripsi |
---|---|---|
<Key> |
Wajib | Menentukan algoritma enkripsi untuk kunci. |
<Content> |
Opsional | Menentukan algoritma enkripsi untuk konten. |
Verifikasi akan gagal jika:
- Algoritma yang dinyatakan dalam properti
alg
di header JWT terenkripsi berbeda dengan algoritma enkripsi kunci yang ditentukan di sini dalam elemen<Key>
. -
Kebijakan menentukan elemen
<Content>
, dan algoritma yang dinyatakan dalam propertienc
di header JWT terenkripsi berbeda dengan yang ditentukan dalam elemen<Content>
.
Misalnya, untuk memverifikasi JWT terenkripsi dan memeriksa apakah algoritma kuncinya adalah
RSA-OAEP-256
, dan algoritma kontennya adalah A128GCM
:
<Algorithms> <Key>RSA-OAEP-256</Key> <Content>A128GCM</Content> </Algorithms>
Sebaliknya, untuk memverifikasi JWT terenkripsi dan memeriksa apakah algoritma kuncinya adalah
RSA-OAEP-256
, dan tidak menerapkan batasan pada algoritma konten:
<Algorithms> <Key>RSA-OAEP-256</Key> </Algorithms>
Algoritma enkripsi kunci
Tabel berikut mencantumkan algoritma yang tersedia untuk enkripsi kunci, serta jenis kunci yang harus Anda tentukan untuk memverifikasi JWT menggunakan algoritma enkripsi kunci tersebut.
Nilai <Key> (algoritma enkripsi kunci) |
Elemen kunci yang diperlukan untuk verifikasi |
---|---|
dir | <DirectKey> |
RSA-OAEP-256 | <PrivateKey> |
|
<SecretKey> |
|
<PasswordKey> |
|
<PrivateKey> |
Lihat Memverifikasi JWT terenkripsi untuk mengetahui contoh saat algoritma enkripsi kunci adalah RSA-OAEP-256
, sehingga Anda menggunakan elemen <PrivateKey>
.
Algoritma enkripsi konten
Kebijakan VerifyJWT tidak mengharuskan Anda menentukan algoritma untuk enkripsi konten. Jika Anda ingin menentukan algoritma yang digunakan untuk enkripsi konten, lakukan dengan turunan<Content> dari elemen <Algorithms>.
Terlepas dari algoritma enkripsi kunci, algoritma berikut - semuanya simetris dan berbasis AES - didukung untuk enkripsi konten:
- A128CBC-HS256
- A192CBC-HS384
- A256CBC-HS512
- A128GCM
- A192GCM
- A256GCM
<Audience>
<Audience>audience-here</Audience> or: <Audience ref='variable-name-here'/>
Kebijakan memverifikasi bahwa klaim audiens dalam JWT cocok dengan nilai yang ditentukan dalam konfigurasi. Jika tidak ada kecocokan, kebijakan akan menampilkan error. Klaim ini mengidentifikasi penerima yang dituju JWT. Ini adalah salah satu klaim terdaftar yang disebutkan dalam RFC7519.
Default | T/A |
Presence | Opsional |
Jenis | String |
Nilai yang valid | Variabel atau string alur yang mengidentifikasi audiens. |
<AdditionalClaims/Claim>
<AdditionalClaims> <Claim name='claim1'>explicit-value-of-claim-here</Claim> <Claim name='claim2' ref='variable-name-here'/> <Claim name='claim3' ref='variable-name-here' type='boolean'/> </AdditionalClaims> or: <AdditionalClaims ref='claim_payload'/>
Memvalidasi bahwa payload JWT berisi klaim tambahan yang ditentukan dan bahwa nilai klaim yang dinyatakan cocok.
Klaim tambahan menggunakan nama yang bukan salah satu nama klaim JWT standar yang terdaftar. Nilai klaim tambahan dapat berupa string, angka, boolean, peta, atau array. Peta hanyalah kumpulan pasangan nama/nilai. Nilai untuk klaim dari jenis mana pun ini dapat ditentukan secara eksplisit dalam konfigurasi kebijakan, atau secara tidak langsung melalui referensi ke variabel alur.
Default | T/A |
Presence | Opsional |
Jenis | String, angka, boolean, atau peta |
Array | Tetapkan ke true untuk menunjukkan apakah nilainya adalah array jenis. Default: false |
Nilai yang valid | Nilai apa pun yang ingin Anda gunakan untuk klaim tambahan. |
Elemen <Claim>
menggunakan atribut berikut:
- name - (Wajib) Nama klaim.
- ref - (Opsional) Nama variabel alur. Jika ada, kebijakan akan menggunakan nilai variabel ini sebagai klaim. Jika atribut ref dan nilai klaim eksplisit ditentukan, nilai eksplisit adalah default, dan digunakan jika variabel alur yang dirujuk tidak terselesaikan.
- type - (Opsional) Salah satu dari: string (default), angka, boolean, atau peta
- array - (Opsional) Tetapkan ke true untuk menunjukkan apakah nilainya adalah array jenis. Default: false.
Saat Anda menyertakan elemen <Claim>
, nama klaim ditetapkan secara statis saat Anda mengonfigurasi kebijakan. Atau, Anda dapat meneruskan objek JSON untuk menentukan nama klaim.
Karena objek JSON diteruskan sebagai variabel, nama klaim ditentukan saat runtime.
Contoh:
<AdditionalClaims ref='json_claims'/>
Dengan variabel json_claims
berisi objek JSON dalam bentuk:
{ "sub" : "person@example.com", "iss" : "urn://secure-issuer@example.com", "non-registered-claim" : { "This-is-a-thing" : 817, "https://example.com/foobar" : { "p": 42, "q": false } } }
<AdditionalHeaders/Claim>
<AdditionalHeaders> <Claim name='claim1'>explicit-value-of-claim-here</Claim> <Claim name='claim2' ref='variable-name-here'/> <Claim name='claim3' ref='variable-name-here' type='boolean'/> <Claim name='claim4' ref='variable-name' type='string' array='true'/> </AdditionalHeaders>
Memvalidasi bahwa header JWT berisi pasangan nama/nilai klaim tambahan yang ditentukan dan bahwa nilai klaim yang dinyatakan cocok.
Klaim tambahan menggunakan nama yang bukan salah satu nama klaim JWT standar yang terdaftar. Nilai klaim tambahan dapat berupa string, angka, boolean, peta, atau array. Peta hanyalah kumpulan pasangan nama/nilai. Nilai untuk klaim dari jenis mana pun ini dapat ditentukan secara eksplisit dalam konfigurasi kebijakan, atau secara tidak langsung melalui referensi ke variabel alur.
Default | T/A |
Presence | Opsional |
Jenis |
String (default), angka, boolean, atau peta. Jenis defaultnya adalah String jika tidak ada jenis yang ditentukan. |
Array | Tetapkan ke true untuk menunjukkan apakah nilainya adalah array jenis. Default: false |
Nilai yang valid | Nilai apa pun yang ingin Anda gunakan untuk klaim tambahan. |
Elemen <Claim>
menggunakan atribut berikut:
- name - (Wajib) Nama klaim.
- ref - (Opsional) Nama variabel alur. Jika ada, kebijakan akan menggunakan nilai variabel ini sebagai klaim. Jika atribut ref dan nilai klaim eksplisit ditentukan, nilai eksplisit adalah default, dan digunakan jika variabel alur yang dirujuk tidak terselesaikan.
- type - (Opsional) Salah satu dari: string (default), angka, boolean, atau peta
- array - (Opsional) Tetapkan ke true untuk menunjukkan apakah nilainya adalah array jenis. Default: false.
<CustomClaims>
Catatan: Saat ini, elemen CustomClaims disisipkan saat Anda menambahkan kebijakan GenerateJWT baru melalui UI. Elemen ini tidak berfungsi dan diabaikan. Elemen yang benar untuk digunakan adalah <AdditionalClaims>. UI akan diperbarui untuk menyisipkan elemen yang benar di lain waktu.
<Id>
<Id>explicit-jti-value-here</Id> -or- <Id ref='variable-name-here'/> -or- <Id/>
Memverifikasi bahwa JWT memiliki klaim jti tertentu. Jika nilai teks dan atribut ref kosong, kebijakan akan menghasilkan jti yang berisi UUID acak. Klaim ID JWT (jti) adalah ID unik untuk JWT. Untuk mengetahui informasi selengkapnya tentang jti, lihat RFC7519.
Default | T/A |
Presence | Opsional |
Jenis | String, atau referensi. |
Nilai yang valid | String atau nama variabel alur yang berisi ID. |
<IgnoreCriticalHeaders>
<IgnoreCriticalHeaders>true|false</IgnoreCriticalHeaders>
Tetapkan ke salah (false) jika Anda ingin kebijakan menampilkan error saat header yang tercantum dalam header crit JWT tidak tercantum dalam elemen <KnownHeaders>
.
Tetapkan ke benar (true) untuk menyebabkan kebijakan VerifyJWT mengabaikan header crit.
Salah satu alasan untuk menetapkan elemen ini ke benar (true) adalah jika Anda berada di lingkungan pengujian dan belum siap menangani kegagalan pada header yang tidak ada.
Default | false |
Presence | Opsional |
Jenis | Boolean |
Nilai yang valid | benar atau salah |
<IgnoreIssuedAt>
<IgnoreIssuedAt>true|false</IgnoreIssuedAt>
Tetapkan ke salah (default) jika Anda ingin kebijakan menampilkan error saat JWT berisi
klaim iat
(Diterbitkan pada) yang menentukan waktu di masa mendatang.
Tetapkan ke benar (true) untuk menyebabkan kebijakan mengabaikan iat
selama verifikasi.
Default | false |
Presence | Opsional |
Jenis | Boolean |
Nilai yang valid | benar atau salah |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
Tetapkan ke salah (false) jika Anda ingin kebijakan menampilkan error saat variabel yang dirujuk yang ditentukan dalam kebijakan tidak dapat di-resolve. Tetapkan ke benar (true) untuk memperlakukan variabel yang tidak dapat di-resolve sebagai string kosong (null).
Default | false |
Presence | Opsional |
Jenis | Boolean |
Nilai yang valid | benar atau salah |
<Issuer>
<VerifyJWT name='VJWT-29'> ... <!-- verify that the iss claim matches a hard-coded value --> <Issuer>issuer-string-here</Issuer> or: <!-- verify that the iss claim matches the value contained in a variable --> <Issuer ref='variable-containing-issuer'/> or: <!-- verify via a variable; fallback to a hard-coded value if the variable is empty --> <Issuer ref='variable-containing-issuer'>fallback-value-here</Issuer>
Kebijakan ini memverifikasi bahwa penerbit di JWT (klaim iss
) cocok dengan string yang ditentukan dalam elemen konfigurasi. Klaim iss
adalah salah satu klaim terdaftar
yang disebutkan dalam IETF RFC 7519.
Default | T/A |
Presence | Opsional |
Jenis | String, atau referensi |
Nilai yang valid | Semua |
<KnownHeaders>
<KnownHeaders>a,b,c</KnownHeaders> or: <KnownHeaders ref='variable_containing_headers'/>
Kebijakan GenerateJWT menggunakan elemen <CriticalHeaders>
untuk mengisi header crit di JWT. Contoh:
{ "typ": "...", "alg" : "...", "crit" : [ "a", "b", "c" ], }
Kebijakan VerifyJWT memeriksa header crit di JWT, jika ada, dan untuk setiap header yang tercantum, kebijakan ini
memeriksa apakah elemen <KnownHeaders>
juga mencantumkan header tersebut. Elemen
<KnownHeaders>
dapat berisi superset item yang tercantum dalam crit.
Hanya perlu semua header yang tercantum di crit yang tercantum di elemen <KnownHeaders>
. Setiap header yang ditemukan kebijakan di crit
yang juga tidak tercantum di <KnownHeaders>
akan menyebabkan kebijakan VerifyJWT gagal.
Secara opsional, Anda dapat mengonfigurasi kebijakan VerifyJWT untuk mengabaikan header crit dengan menetapkan elemen <IgnoreCriticalHeaders>
ke true
.
Default | T/A |
Presence | Opsional |
Jenis | Array string yang dipisahkan koma |
Nilai yang valid | Array atau nama variabel yang berisi array. |
<MaxLifespan>
<VerifyJWT name='VJWT-62'> ... <!-- hard-coded lifespan of 5 minutes --> <MaxLifespan>5m</MaxLifespan> or: <!-- refer to a variable --> <MaxLifespan ref='variable-here'/> or: <!-- attribute telling the policy to use iat rather than nbf --> <MaxLifespan useIssueTime='true'>1h</MaxLifespan> or: <!-- useIssueTime and ref, and hard-coded fallback value. --> <MaxLifespan useIssueTime='true' ref='variable-here'>1h</MaxLifespan> ...
Mengonfigurasi kebijakan VerifyJWT untuk memeriksa apakah masa berlaku token tidak melebihi nilai minimum yang ditentukan. Anda dapat menentukan nilai minimum dengan menggunakan angka yang diikuti dengan karakter, yang menunjukkan jumlah detik, menit, jam, hari, atau minggu. Karakter berikut valid:
s
- detikm
- menith
- jamd
- hariw
- minggu
Misalnya, Anda dapat menentukan salah satu nilai berikut: 120d, 10m, 1h, 7d, 3w.
Kebijakan ini menghitung masa berlaku
token yang sebenarnya dengan mengurangi nilai not-before (nbf)
dari nilai masa berlaku
(exp)
. Jika exp
atau nbf
tidak ada, kebijakan akan menampilkan error. Jika masa berlaku token melebihi jangka waktu yang ditentukan, kebijakan akan menampilkan error.
Anda dapat menetapkan atribut opsional useIssueTime
ke true
untuk menggunakan
nilai iat
, bukan nilai nbf
, saat menghitung masa berlaku
token.
Penggunaan elemen MaxLifespan
bersifat opsional. Jika menggunakan elemen ini, Anda hanya dapat menggunakannya sekali.
<PrivateKey>
Gunakan elemen ini untuk menentukan kunci pribadi yang dapat digunakan untuk memverifikasi JWT yang dienkripsi dengan algoritma asimetris. Berikut adalah deskripsi kemungkinan elemen turunan.
<Password>
<PrivateKey> <Password ref="private.privatekey-password"/> </PrivateKey>
Turunan dari elemen <PrivateKey>
. Menentukan sandi yang harus digunakan kebijakan untuk mendekripsi kunci pribadi, jika perlu, saat memverifikasi JWT terenkripsi.
Gunakan atribut ref
untuk meneruskan
sandi dalam variabel alur.
Default | T/A |
Presence | Opsional |
Jenis | String |
Nilai yang valid |
Referensi variabel alur.
Catatan: Anda harus menentukan variabel alur. Apigee akan menolak konfigurasi kebijakan yang tidak valid,
dengan sandi yang ditentukan dalam teks biasa. Variabel alur harus memiliki awalan "private". Misalnya, |
<Value>
<PrivateKey> <Value ref="private.variable-name-here"/> </PrivateKey>
Turunan dari elemen <PrivateKey>
. Menentukan kunci pribadi yang dienkode PEM
yang akan digunakan kebijakan untuk memverifikasi JWT terenkripsi. Gunakan atribut ref
untuk meneruskan
kunci dalam variabel alur.
Default | T/A |
Presence | Diperlukan untuk memverifikasi JWT yang telah dienkripsi menggunakan algoritma enkripsi kunci asimetris. |
Jenis | String |
Nilai yang valid |
Variabel alur yang berisi string yang mewakili nilai kunci pribadi RSA yang dienkode PEM.
Catatan: Variabel alur harus memiliki awalan "private". Misalnya,
|
<PublicKey>
Menentukan sumber untuk kunci publik yang digunakan untuk memverifikasi JWT yang ditandatangani dengan algoritma asimetris. Algoritma dukungan mencakup RS256/RS384/RS512, PS256/PS384/PS512, atau ES256/ES384/ES512. Berikut adalah deskripsi kemungkinan elemen turunan.
<Certificate>
<PublicKey> <Certificate ref="signed_public.cert"/> </PublicKey> -or- <PublicKey> <Certificate> -----BEGIN CERTIFICATE----- cert data -----END CERTIFICATE----- </Certificate> </PublicKey>
Turunan dari elemen <PublicKey>
. Menentukan sertifikat yang ditandatangani
yang digunakan sebagai sumber kunci publik. Gunakan atribut ref
untuk meneruskan sertifikat yang ditandatangani dalam variabel alur, atau tentukan sertifikat berenkode PEM secara langsung.
Default | T/A |
Presence | Opsional. Untuk memverifikasi JWT yang ditandatangani dengan algoritma asimetris, Anda harus menggunakan elemen
<Certificate> , <JWKS> , atau
<Value> untuk memberikan kunci publik. |
Jenis | String |
Nilai yang valid | Variabel atau string alur. |
<JWKS>
<PublicKey> <JWKS … > … </JWKS> </PublicKey>
Turunan dari elemen <PublicKey>
. Menentukan JWKS sebagai sumber kunci publik. Ini akan menjadi daftar kunci yang mengikuti format yang dijelaskan dalam
IETF RFC 7517 - JSON Web Key (JWK).
Jika JWT masuk memiliki ID kunci yang ada di JWKS, kebijakan akan menggunakan kunci publik yang benar untuk memverifikasi tanda tangan JWT. Untuk mengetahui detail tentang fitur ini, lihat Menggunakan JSON Web Key Set (JWKS) untuk memverifikasi JWT.
Jika Anda mengambil nilai dari URL publik, Apigee akan meng-cache JWKS selama 300 detik. Saat masa berlaku cache berakhir, Apigee akan mengambil JWKS lagi.
Default | T/A |
Presence | Opsional. Untuk memverifikasi JWT yang ditandatangani dengan algoritma asimetris, Anda harus menggunakan elemen
<Certificate> , <JWKS> , atau
<Value> untuk memberikan kunci publik. |
Jenis | String |
Nilai yang valid |
Anda dapat menentukan JWKS dengan salah satu dari empat cara berikut:
|
<Value>
<PublicKey> <Value ref="public.publickeyorcert"/> </PublicKey> -or- <PublicKey> <Value> -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw2kPrRzcufvUNHvTH/WW ...YOUR PUBLIC KEY MATERIAL HERE....d1lH8MfUyRXmpmnNxJHAC2F73IyN ZmkDb/DRW5onclGzxQITBFP3S6JXd4LNESJcTp705ec1cQ9Wp2Kl+nKrKyv1E5Xx DQIDAQAB -----END PUBLIC KEY----- </Value> </PublicKey>
Turunan dari elemen <PublicKey>
. Menentukan kunci publik yang akan digunakan
untuk memverifikasi tanda tangan pada JWT yang ditandatangani. Gunakan atribut ref
untuk meneruskan kunci dalam variabel alur, atau tentukan kunci yang dienkode PEM secara langsung.
Default | T/A |
Presence | Opsional. Untuk memverifikasi JWT yang ditandatangani dengan algoritma asimetris, Anda harus menggunakan elemen
<Certificate> , <JWKS> , atau
<Value> untuk memberikan kunci publik. |
Jenis | String |
Nilai yang valid | Variabel atau string alur. |
<RequiredClaims>
<VerifyJWT name='VJWT-1'> ... <!-- Directly specify the names of the claims to require --> <RequiredClaims>sub,iss,exp</RequiredClaims> -or- <!-- Specify the claim names indirectly, via a context variable --> <RequiredClaims ref='claims_to_require'/> ... </VerifyJWT>
Elemen <RequiredClaims>
bersifat opsional. Ini menentukan daftar nama klaim yang dipisahkan koma yang harus ada dalam payload JWT, saat memverifikasi JWT. Elemen ini
memastikan bahwa JWT yang ditampilkan berisi klaim yang diperlukan, tetapi tidak memvalidasi konten
klaim. Jika salah satu klaim yang tercantum tidak ada, kebijakan VerifyJWT akan menampilkan
error saat runtime.
Default | T/A |
Presence | Opsional |
Jenis | String |
Nilai yang valid | Daftar nama klaim yang dipisahkan koma. |
<SecretKey>
<SecretKey encoding="base16|hex|base64|base64url" > <Value ref="private.your-variable-name"/> </SecretKey>
Elemen SecretKey bersifat opsional. Ini menentukan kunci rahasia yang akan digunakan saat memverifikasi JWT yang ditandatangani yang menggunakan algoritma simetris (HS*) atau saat memverifikasi JWT terenkripsi yang menggunakan algoritma simetris (AES) untuk enkripsi kunci.
Anak-anak <SecretKey>
Tabel berikut memberikan deskripsi elemen turunan dan atribut
<SecretKey>
:
Anak | Kehadiran | Deskripsi |
---|---|---|
encoding (atribut) | Opsional | Menentukan cara kunci dienkode dalam variabel yang dirujuk. Secara default, jika tidak ada
atribut <SecretKey encoding="hex" > <Value ref="private.secretkey"/> </SecretKey> Pada contoh di atas, karena encoding-nya adalah |
Nilai (elemen) | Wajib | Kunci rahasia yang dienkode. Menentukan kunci rahasia yang akan digunakan
untuk memverifikasi payload. Gunakan atribut <SecretKey> <Value ref="private.my-secret-variable"/> </SecretKey> Apigee menerapkan kekuatan kunci minimum untuk algoritma HS256/HS384/HS512. Panjang kunci minimum untuk HS256 adalah 32 byte, untuk HS384 adalah 48 byte, dan untuk HS512 adalah 64 byte. Menggunakan kunci dengan kekuatan yang lebih rendah akan menyebabkan error runtime. |
<Source>
<Source>jwt-variable</Source>
Jika ada, menentukan variabel alur tempat kebijakan mengharapkan untuk menemukan JWT yang akan diverifikasi.
Dengan elemen ini, Anda dapat mengonfigurasi kebijakan untuk mengambil JWT dari variabel parameter formulir atau kueri atau variabel lainnya. Jika elemen ini ada, kebijakan tidak akan
menghapus awalan Bearer
yang mungkin ada. Jika variabel tidak ada atau jika
kebijakan tidak menemukan JWT dalam variabel yang ditentukan, kebijakan akan menampilkan error.
Secara default, jika tidak ada elemen <Source>
, kebijakan akan mengambil JWT dengan membaca variabel request.header.authorization
dan menghapus awalan Bearer
. Jika Anda meneruskan JWT di header Otorisasi sebagai token pembawa (dengan awalan Bearer
), jangan tentukan elemen <Source>
dalam konfigurasi kebijakan. Misalnya, Anda tidak akan menggunakan elemen <Source>
dalam konfigurasi kebijakan jika meneruskan JWT di header Otorisasi seperti ini:
curl -v https://api-endpoint/proxy1_basepath/api1 -H "Authorization: Bearer eyJhbGciOiJ..."
Default | request.header.authorization (Lihat catatan di atas untuk mengetahui informasi penting
tentang setelan default). |
Presence | Opsional |
Jenis | String |
Nilai yang valid | Nama variabel alur Apigee. |
<Subject>
<VerifyJWT name='VJWT-8'> ... <!-- verify that the sub claim matches a hard-coded value --> <Subject>subject-string-here</Subject> or: <!-- verify that the sub claim matches the value contained in a variable --> <Subject ref='variable-containing-subject'/> or: <!-- verify via a variable; fallback to a hard-coded value if the variable is empty --> <Subject ref='variable-containing-subject'>fallback-value-here</Subject>
Kebijakan memverifikasi bahwa subjek dalam JWT (klaim sub
) cocok dengan string yang ditentukan dalam konfigurasi kebijakan. Klaim sub
adalah salah satu klaim terdaftar
yang dijelaskan dalam RFC7519.
Default | T/A |
Presence | Opsional |
Jenis | String |
Nilai yang valid | Nilai apa pun yang mengidentifikasi subjek secara unik. |
<TimeAllowance>
<VerifyJWT name='VJWT-23'> ... <!-- configure a hard-coded time allowance of 20 seconds --> <TimeAllowance>20s</TimeAllowance> or: <!-- refer to a variable containing the time allowance --> <TimeAllowance ref='variable-containing-time-allowance'/> or: <!-- refer to a variable; fallback to a hard-coded value if the variable is empty --> <TimeAllowance ref='variable-containing-allowance'>30s</TimeAllowance>
"Masa tenggang" untuk waktu, untuk memperhitungkan kemiringan jam antara penerbit dan verifier JWT. Hal ini akan berlaku untuk masa berlaku (klaim exp
) serta
not-before-time (klaim nbf
). Misalnya, jika waktu yang diizinkan dikonfigurasi
menjadi 30s
, JWT yang sudah tidak berlaku akan diperlakukan sebagai masih valid, selama 30 detik
setelah masa berlaku yang dinyatakan. Not-before-time akan dievaluasi dengan cara yang sama.
Default | 0 detik (tidak ada masa tenggang) |
Presence | Opsional |
Jenis | String |
Nilai yang valid |
Ekspresi rentang waktu, atau referensi ke variabel alur yang berisi ekspresi.
Rentang waktu dapat ditentukan dengan bilangan bulat positif, diikuti dengan satu karakter yang menunjukkan unit waktu, sebagai berikut:
|
<Type>
<Type>type-string-here</Type>
Menjelaskan apakah kebijakan memverifikasi JWT yang ditandatangani atau JWT terenkripsi.
Elemen <Type>
bersifat opsional. Anda dapat menggunakannya untuk memberi tahu pembaca tentang konfigurasi apakah kebijakan menghasilkan JWT yang ditandatangani atau dienkripsi.
- Jika elemen
<Type>
ada:- Jika nilai
<Type>
adalahSigned
, kebijakan akan memverifikasi JWT yang ditandatangani, dan elemen<Algorithm>
harus ada. - Jika nilai
<Type>
adalahEncrypted
, kebijakan akan memverifikasi JWT terenkripsi, dan elemen<Algorithms>
harus ada.
- Jika nilai
- Jika elemen
<Type>
tidak ada:- Jika elemen
<Algorithm>
ada, kebijakan akan menganggap<Type>
adalahSigned
. - Jika elemen
<Algorithms>
ada, kebijakan akan mengasumsikan<Type>
adalahEncrypted
.
- Jika elemen
- Jika
<Algorithm>
atau<Algorithms>
tidak ada, konfigurasi tidak valid.
Default | T/A |
Presence | Opsional |
Jenis | String |
Nilai yang valid | Signed atau Encrypted |
Variabel alur
Setelah berhasil, kebijakan Verify JWT dan Decode JWT menetapkan variabel konteks sesuai dengan pola ini:
jwt.{policy_name}.{variable_name}
Misalnya, jika nama kebijakan adalah jwt-parse-token
, kebijakan akan menyimpan
subjek yang ditentukan dalam JWT ke variabel konteks bernama jwt.jwt-parse-token.decoded.claim.sub
.
(Untuk kompatibilitas mundur, fitur ini juga akan tersedia dalam jwt.jwt-parse-token.claim.subject
)
Nama variabel | Deskripsi |
---|---|
claim.audience |
Klaim audiens JWT. Nilai ini bisa berupa string, atau array string. |
claim.expiry |
Tanggal/waktu habis masa berlaku, yang dinyatakan dalam milidetik sejak epoch. |
claim.issuedat |
Tanggal token diterbitkan, dinyatakan dalam milidetik sejak epoch. |
claim.issuer |
Klaim penerbit JWT. |
claim.notbefore |
Jika JWT menyertakan klaim nbf, variabel ini akan berisi nilai, yang dinyatakan dalam milidetik sejak epoch. |
claim.subject |
Klaim subjek JWT. |
claim.name |
Nilai klaim yang disebutkan (standar atau tambahan) dalam payload. Salah satunya akan ditetapkan untuk setiap klaim dalam payload. |
decoded.claim.name |
Nilai yang dapat diuraikan JSON dari klaim yang disebutkan (standar atau tambahan) dalam payload. Satu variabel ditetapkan untuk setiap klaim dalam payload. Misalnya, Anda dapat menggunakan decoded.claim.iat untuk mengambil waktu penerbitan JWT, yang dinyatakan dalam detik sejak epoch. Meskipun Anda
juga dapat menggunakan variabel alur claim.name , variabel ini adalah
variabel yang direkomendasikan untuk mengakses klaim. |
decoded.header.name |
Nilai header yang dapat diuraikan JSON dalam payload. Satu variabel ditetapkan untuk setiap header dalam payload. Meskipun Anda juga dapat menggunakan variabel alur header.name ,
ini adalah variabel yang direkomendasikan untuk mengakses header. |
expiry_formatted |
Tanggal/waktu habis masa berlaku, yang diformat sebagai string yang dapat dibaca manusia. Contoh: 2017-09-28T21:30:45.000+0000 |
header.algorithm |
Algoritma penandatanganan yang digunakan pada JWT. Misalnya, RS256, HS384, dan sebagainya. Lihat Parameter Header(Algoritme) untuk mengetahui informasi selengkapnya. |
header.kid |
ID Kunci, jika ditambahkan saat JWT dibuat. Lihat juga "Menggunakan Kumpulan Kunci Web JSON (JWKS)" di ringkasan kebijakan JWT untuk memverifikasi JWT. Lihat Parameter Header(Key ID) untuk informasi selengkapnya. |
header.type |
Akan ditetapkan ke JWT . |
header.name |
Nilai header yang diberi nama (standar atau tambahan). Salah satunya akan ditetapkan untuk setiap header tambahan di bagian header JWT. |
header-json |
Header dalam format JSON. |
is_expired |
benar atau salah |
payload-claim-names |
Array klaim yang didukung oleh JWT. |
payload-json |
Payload dalam format JSON.
|
seconds_remaining |
Jumlah detik sebelum masa berlaku token berakhir. Jika masa berlaku token habis, angka ini akan negatif. |
time_remaining_formatted |
Waktu yang tersisa sebelum token akan berakhir, yang diformat sebagai string yang dapat dibaca manusia. Contoh: 00:59:59.926 |
valid |
Dalam kasus VerifyJWT, variabel ini akan bernilai benar (true) saat tanda tangan diverifikasi, dan waktu saat ini adalah sebelum masa berlaku token, dan setelah nilai notBefore token, jika ada. Sebaliknya, salah.
Dalam kasus DecodeJWT, variabel ini belum ditetapkan. |
Referensi error
Bagian ini menjelaskan kode error dan pesan error yang ditampilkan serta variabel error yang ditetapkan oleh Apigee saat kebijakan ini memicu error. Informasi ini penting untuk diketahui jika Anda mengembangkan aturan error untuk menangani error. Untuk mempelajari lebih lanjut, lihat Yang perlu Anda ketahui tentang error kebijakan dan Menangani error.
Error runtime
Error ini dapat terjadi saat kebijakan dijalankan.
Kode kerusakan | Status HTTP | Terjadi saat |
---|---|---|
steps.jwt.AlgorithmInTokenNotPresentInConfiguration |
401 |
Terjadi saat kebijakan verifikasi memiliki beberapa algoritma. |
steps.jwt.AlgorithmMismatch |
401 |
Algoritma yang ditentukan dalam kebijakan Generate tidak cocok dengan algoritma yang diharapkan dalam
kebijakan Verify . Algoritma yang ditentukan harus cocok. |
steps.jwt.FailedToDecode |
401 |
Kebijakan tidak dapat mendekode JWT. JWT mungkin rusak. |
steps.jwt.GenerationFailed |
401 |
Kebijakan tidak dapat membuat JWT. |
steps.jwt.InsufficientKeyLength |
401 |
Untuk kunci kurang dari 32 byte untuk algoritma HS256, kurang dari 48 byte untuk algoritma HS386, dan kurang dari 64 byte untuk algoritma HS512. |
steps.jwt.InvalidClaim |
401 |
Untuk klaim yang tidak ada atau ketidakcocokan klaim, atau header yang tidak ada atau ketidakcocokan header. |
steps.jwt.InvalidConfiguration |
401 |
Elemen <Algorithm> dan <Algorithms>
ada. |
steps.jwt.InvalidCurve |
401 |
Kurva yang ditentukan oleh kunci tidak valid untuk algoritma Elliptic Curve. |
steps.jwt.InvalidIterationCount |
401 |
Jumlah iterasi yang digunakan dalam JWT terenkripsi tidak sama dengan jumlah iterasi yang ditentukan dalam konfigurasi kebijakan VerifyJWT. Hal ini hanya berlaku untuk JWT yang
menggunakan <PasswordKey> . |
steps.jwt.InvalidJsonFormat |
401 |
JSON tidak valid ditemukan di header atau payload. |
steps.jwt.InvalidKeyConfiguration |
401 |
JWKS dalam elemen <PublicKey> tidak valid. Alasannya
mungkin karena endpoint URI JWKS tidak dapat dijangkau dari instance Apigee. Uji konektivitas ke endpoint dengan membuat proxy passthrough dan menggunakan endpoint JWKS sebagai target. |
steps.jwt.InvalidSaltLength |
401 |
Panjang salt yang digunakan dalam JWT terenkripsi tidak sama dengan panjang salt yang ditentukan dalam konfigurasi kebijakan VerifyJWT. Hal ini hanya berlaku untuk JWT yang
menggunakan <PasswordKey> . |
steps.jwt.InvalidPasswordKey |
401 |
Kunci yang ditentukan tidak memenuhi persyaratan. |
steps.jwt.InvalidPrivateKey |
401 |
Kunci yang ditentukan tidak memenuhi persyaratan. |
steps.jwt.InvalidPublicKey |
401 |
Kunci yang ditentukan tidak memenuhi persyaratan. |
steps.jwt.InvalidSecretKey |
401 |
Kunci yang ditentukan tidak memenuhi persyaratan. |
steps.jwt.InvalidToken |
401 |
Error ini terjadi saat verifikasi tanda tangan JWT gagal. |
steps.jwt.JwtAudienceMismatch |
401 |
Klaim audiens gagal dalam verifikasi token. |
steps.jwt.JwtIssuerMismatch |
401 |
Klaim penerbit gagal dalam verifikasi token. |
steps.jwt.JwtSubjectMismatch |
401 |
Klaim subjek gagal dalam verifikasi token. |
steps.jwt.KeyIdMissing |
401 |
Kebijakan Verify menggunakan JWKS sebagai sumber kunci publik, tetapi JWT yang ditandatangani tidak
menyertakan properti kid di header. |
steps.jwt.KeyParsingFailed |
401 |
Kunci publik tidak dapat diuraikan dari informasi kunci yang diberikan. |
steps.jwt.NoAlgorithmFoundInHeader |
401 |
Terjadi saat JWT tidak berisi header algoritma. |
steps.jwt.NoMatchingPublicKey |
401 |
Kebijakan Verify menggunakan JWKS sebagai sumber untuk kunci publik, tetapi kid
dalam JWT yang ditandatangani tidak tercantum dalam JWKS. |
steps.jwt.SigningFailed |
401 |
Di GenerateJWT, untuk kunci yang kurang dari ukuran minimum untuk algoritma HS384 atau HS512 |
steps.jwt.TokenExpired |
401 |
Kebijakan ini mencoba memverifikasi token yang sudah tidak berlaku. |
steps.jwt.TokenNotYetValid |
401 |
Token belum valid. |
steps.jwt.UnhandledCriticalHeader |
401 |
Header yang ditemukan oleh kebijakan Verifikasi JWT di header crit tidak
tercantum dalam KnownHeaders . |
steps.jwt.UnknownException |
401 |
Terjadi pengecualian yang tidak diketahui. |
steps.jwt.WrongKeyType |
401 |
Jenis kunci yang ditentukan salah. Misalnya, jika Anda menentukan kunci RSA untuk algoritma Elliptic Curve, atau kunci kurva untuk algoritma RSA. |
Error saat deployment
Error ini dapat terjadi saat Anda men-deploy proxy yang berisi kebijakan ini.
Nama error | Penyebab | Perbaiki |
---|---|---|
InvalidNameForAdditionalClaim |
Deployment akan gagal jika klaim yang digunakan dalam elemen turunan <Claim>
dari elemen <AdditionalClaims> adalah salah satu nama terdaftar berikut:
kid , iss , sub , aud , iat ,
exp , nbf , atau jti .
|
build |
InvalidTypeForAdditionalClaim |
Jika klaim yang digunakan dalam elemen turunan <Claim>
dari elemen <AdditionalClaims> bukan dari jenis string , number ,
boolean , atau map , deployment akan gagal.
|
build |
MissingNameForAdditionalClaim |
Jika nama klaim tidak ditentukan dalam elemen turunan <Claim>
dari elemen <AdditionalClaims> , deployment akan gagal.
|
build |
InvalidNameForAdditionalHeader |
Error ini terjadi saat nama klaim yang digunakan dalam elemen turunan <Claim>
dari elemen <AdditionalClaims> adalah alg atau typ .
|
build |
InvalidTypeForAdditionalHeader |
Jika jenis klaim yang digunakan dalam elemen turunan <Claim>
dari elemen <AdditionalClaims> bukan dari jenis string , number ,
boolean , atau map , deployment akan gagal.
|
build |
InvalidValueOfArrayAttribute |
Error ini terjadi jika nilai atribut array di elemen turunan <Claim>
dari elemen <AdditionalClaims> tidak ditetapkan ke true atau false .
|
build |
InvalidValueForElement |
Jika nilai yang ditentukan dalam elemen <Algorithm> bukan nilai yang didukung, deployment akan gagal.
|
build |
MissingConfigurationElement |
Error ini akan terjadi jika elemen <PrivateKey> tidak digunakan dengan
algoritma keluarga RSA atau elemen <SecretKey> tidak digunakan dengan algoritma
Keluarga HS.
|
build |
InvalidKeyConfiguration |
Jika elemen turunan <Value> tidak ditentukan dalam elemen <PrivateKey>
atau <SecretKey> , deployment akan gagal.
|
build |
EmptyElementForKeyConfiguration |
Jika atribut ref dari elemen turunan <Value> dari elemen <PrivateKey>
atau <SecretKey> kosong atau tidak ditentukan, deployment akan gagal.
|
build |
InvalidConfigurationForVerify |
Error ini terjadi jika elemen <Id> ditentukan dalam
elemen <SecretKey> .
|
build |
InvalidEmptyElement |
Error ini terjadi jika elemen <Source> kebijakan Verifikasi JWT
kosong. Jika ada, variabel ini harus ditentukan dengan nama variabel alur Apigee.
|
build |
InvalidPublicKeyValue |
Jika nilai yang digunakan dalam elemen turunan <JWKS> dari elemen <PublicKey>
tidak menggunakan format yang valid seperti yang ditentukan dalam RFC 7517,
deployment akan gagal.
|
build |
InvalidConfigurationForActionAndAlgorithm |
Jika elemen <PrivateKey> digunakan dengan algoritma Keluarga HS atau
elemen <SecretKey> digunakan dengan algoritma Keluarga RSA, deployment
akan gagal.
|
build |
Variabel kesalahan
Variabel ini ditetapkan saat terjadi error runtime. Untuk informasi selengkapnya, lihat Yang perlu Anda ketahui tentang error kebijakan.
Variabel | Dari mana | Contoh |
---|---|---|
fault.name="fault_name" |
fault_name adalah nama kesalahannya, seperti yang tercantum dalam tabel Error runtime di atas. Nama kesalahan adalah bagian terakhir dari kode kesalahan. | fault.name Matches "InvalidToken" |
JWT.failed |
Semua kebijakan JWT menetapkan variabel yang sama jika terjadi kegagalan. | JWT.failed = true |
Contoh respons error
Untuk penanganan error, praktik terbaiknya adalah menjebak bagian errorcode
dari respons
error. Jangan mengandalkan teks di faultstring
, karena dapat berubah.
Contoh aturan kesalahan
<FaultRules> <FaultRule name="JWT Policy Errors"> <Step> <Name>JavaScript-1</Name> <Condition>(fault.name Matches "InvalidToken")</Condition> </Step> <Condition>JWT.failed=true</Condition> </FaultRule> </FaultRules>