Halaman ini berlaku untuk Apigee dan Apigee hybrid.
Lihat dokumentasi Apigee Edge.
Apa
Mendekode JWT tanpa memverifikasi tanda tangan pada JWT. Hal ini paling berguna jika digunakan bersama dengan kebijakan VerifyJWT, saat nilai klaim dari dalam JWT harus diketahui sebelum memverifikasi tanda tangan JWT.
Kebijakan Dekode JWT berfungsi terlepas dari algoritma yang digunakan untuk menandatangani JWT. 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.
Video
Tonton video singkat untuk mempelajari cara mendekode JWT.
Contoh: Mendekode JWT
Kebijakan yang ditampilkan di bawah mendekode JWT yang ditemukan di variabel alur var.jwt. Variabel ini harus ada dan berisi JWT yang valid (dapat didekode). Kebijakan ini dapat memperoleh JWT dari variabel alur apa pun.
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>var.jwt</Source> </DecodeJWT>
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.
Referensi elemen untuk Mendekode JWT
Referensi kebijakan menjelaskan elemen dan atribut kebijakan Decode JWT.
Atribut yang berlaku untuk elemen tingkat atas
<DecodeJWT name="JWT" continueOnError="false" enabled="true" async="false">
Atribut berikut bersifat umum untuk semua elemen induk kebijakan.
Atribut | Deskripsi | Default | Kehadiran |
---|---|---|---|
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 Apigee dengan nama bahasa alami yang berbeda.
Default | Jika Anda menghapus elemen ini, nilai atribut nama kebijakan akan digunakan. |
Kehadiran | Opsional |
Jenis | String |
<Source>
<Source>jwt-variable</Source>
Jika ada, menentukan variabel alur tempat kebijakan mengharapkan untuk menemukan JWT yang akan didekode.
Default | request.header.authorization (Lihat catatan di atas untuk mengetahui informasi penting
tentang setelan default). |
Kehadiran | Opsional |
Jenis | String |
Nilai yang valid | Nama variabel alur Apigee |
Variabel alur
Setelah berhasil, kebijakan Verify JWT dan Decode JWT akan 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, API ini juga akan tersedia di jwt.jwt-parse-token.claim.subject
)
Nama variabel | Deskripsi |
---|---|
claim.audience |
Klaim audiens JWT. Nilai ini dapat berupa string, atau array string. |
claim.expiry |
Tanggal/waktu habis masa berlaku, dinyatakan dalam milidetik sejak epoch. |
claim.issuedat |
Tanggal token dikeluarkan, 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 bernama (standar atau tambahan) dalam payload. Salah satunya akan ditetapkan untuk setiap klaim dalam payload. |
decoded.claim.name |
Nilai klaim bernama (standar atau tambahan) yang dapat diuraikan JSON 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 , ini adalah
variabel yang direkomendasikan untuk digunakan guna 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 , variabel ini direkomendasikan untuk digunakan guna 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 di JWT. Misalnya, RS256, HS384, dan sebagainya. Lihat Parameter Header(Algoritma) 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(ID Kunci) untuk mengetahui informasi selengkapnya. |
header.type |
Akan ditetapkan ke JWT . |
header.name |
Nilai header bernama (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 telah berakhir, angka ini akan negatif. |
time_remaining_formatted |
Waktu yang tersisa sebelum token berakhir masa berlakunya, diformat sebagai string yang dapat dibaca manusia. 00:59:59.926 |
valid |
Dalam kasus VerifyJWT, variabel ini akan bernilai benar saat tanda tangan diverifikasi, dan
waktu saat ini sebelum masa berlaku token berakhir, dan setelah nilai notBefore token, jika
ada. Jika tidak, flag akan bernilai salah.
Dalam kasus DecodeJWT, variabel ini tidak 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 dieksekusi.
Kode kerusakan | Status HTTP | Penyebab | Perbaiki |
---|---|---|---|
steps.jwt.FailedToDecode |
401 |
Terjadi saat kebijakan tidak dapat mendekode JWT. JWT mungkin salah format, tidak valid, atau tidak dapat didekode. | build |
steps.jwt.FailedToResolveVariable |
401 |
Terjadi saat variabel alur yang ditentukan dalam elemen <Source>
kebijakan tidak ada. |
|
steps.jwt.InvalidToken |
401 |
Terjadi saat variabel alur yang ditentukan dalam elemen <Source>
kebijakan berada di luar cakupan atau tidak dapat di-resolve. |
build |
Error saat deployment
Error ini dapat terjadi saat Anda men-deploy proxy yang berisi kebijakan ini.
Nama error | Penyebab | Perbaiki |
---|---|---|
InvalidEmptyElement |
Terjadi saat variabel alur yang berisi JWT yang akan didekode tidak ditentukan dalam elemen <Source> kebijakan.
|
build |
Variabel error
Variabel ini ditetapkan saat error runtime terjadi. Untuk mengetahui informasi selengkapnya, lihat Yang perlu Anda ketahui tentang error kebijakan.
Variabel | Dari mana | Contoh |
---|---|---|
fault.name="fault_name" |
fault_name adalah nama error, seperti yang tercantum dalam tabel Runtime errors di atas. Nama kerusakan adalah bagian terakhir dari kode kerusakan. | 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 teks tersebut dapat berubah.
Contoh aturan error
<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>