Anda sedang melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Apa
Mendekode JWT tanpa memverifikasi tanda tangan di JWT. Fungsi ini paling berguna jika digunakan bersama dengan kebijakan VerifyJWT, ketika nilai klaim dari dalam JWT harus diketahui sebelum memverifikasi tanda tangan JWT.
Kebijakan JWT Decode tetap berfungsi terlepas dari algoritma yang digunakan untuk menandatangani JWT. Lihat ringkasan kebijakan JWS dan JWT untuk pengantar yang mendetail.
Video
Tonton video singkat untuk mempelajari cara mendekode JWT.
Contoh: Mendekode JWT
Kebijakan yang ditampilkan di bawah mendekode JWT yang ditemukan dalam variabel flow var.jwt. Variabel ini harus ada dan memuat JWT yang valid (dapat didekorasi). Kebijakan ini dapat memperoleh JWT dari variabel flow apa pun.
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>var.jwt</Source> </DecodeJWT>
Kebijakan ini menulis output-nya ke variabel konteks sehingga kebijakan atau kondisi berikutnya dalam proxy API dapat memeriksa nilai tersebut. Lihat Variabel flow untuk mengetahui daftar variabel yang ditetapkan oleh kebijakan ini.
Referensi elemen untuk Decode JWT
Referensi kebijakan menjelaskan elemen dan atribut kebijakan Decode JWT.
Atribut yang diterapkan pada 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 |
---|---|---|---|
name |
Nama internal kebijakan. Karakter yang dapat digunakan dalam nama dibatasi untuk:
A-Z0-9._\-$ % . Namun, UI pengelolaan Edge menerapkan pembatasan
tambahan, seperti otomatis menghapus karakter yang bukan alfanumerik.
Atau, gunakan elemen |
T/A | Wajib |
continueOnError |
Setel ke false untuk menampilkan error jika kebijakan gagal. Ini adalah perilaku
yang wajar untuk sebagian besar kebijakan.
Setel ke |
false | Opsional |
diaktifkan |
Setel ke true untuk menerapkan kebijakan.
Setel ke |
true | Opsional |
async | Atribut ini sudah tidak digunakan lagi. | false | Tidak digunakan lagi |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Gunakan selain atribut nama untuk memberi label kebijakan di editor proxy UI pengelolaan dengan nama natural-language yang berbeda.
Default | Jika Anda menghilangkan elemen ini, nilai atribut nama kebijakan akan digunakan. |
Kehadiran | Opsional |
Jenis | String |
<Sumber>
<Source>jwt-variable</Source>
Jika ada, tentukan variabel flow tempat kebijakan diperkirakan akan menemukan JWT untuk didekode.
Default | request.header.authorization (Lihat catatan di atas untuk informasi penting
tentang default). |
Kehadiran | Opsional |
Jenis | String |
Nilai yang valid | Nama variabel alur Edge |
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 kesalahan dan pesan error yang ditampilkan dan variabel kesalahan yang disetel oleh Edge saat kebijakan ini memicu error. Informasi ini penting untuk diketahui apakah Anda mengembangkan aturan kesalahan untuk menangani kesalahan. Untuk mempelajari lebih lanjut, lihat Yang perlu Anda ketahui tentang error kebijakan dan Menangani kesalahan.
Error runtime
Error ini dapat terjadi saat kebijakan dieksekusi.
Kode kesalahan | 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 flow yang ditentukan dalam elemen <Source>
kebijakan tidak ada. |
|
steps.jwt.InvalidToken |
401 | Terjadi saat variabel flow yang ditentukan dalam elemen <Source> kebijakan
berada di luar cakupan atau tidak dapat diselesaikan. |
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 flow yang berisi JWT yang akan didekode tidak ditentukan dalam elemen
<Source> kebijakan.
|
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 kesalahan, seperti yang tercantum dalam tabel Error runtime di atas. Nama kesalahan adalah bagian terakhir dari kode kesalahan. | fault.name Matches "TokenExpired" |
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 "TokenExpired")</Condition> </Step> <Condition>JWT.failed=true</Condition> </FaultRule> </FaultRules>