Anda melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
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 mengetahui pengantar mendetail.
Video
Tonton video pendek untuk mempelajari cara mendekode JWT.
Contoh: Mendekode JWT
Kebijakan yang ditampilkan di bawah mendekode JWT yang ditemukan dalam variabel alur var.jwt. Variabel ini harus ada dan berisi JWT yang layak (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 ini menulis outputnya ke variabel konteks sehingga kebijakan atau kondisi berikutnya dalam proxy API dapat memeriksa nilai tersebut. Lihat Variabel alur untuk mengetahui daftar variabel yang ditetapkan oleh kebijakan ini.
Referensi elemen untuk Dekode JWT
Referensi kebijakan menjelaskan elemen dan atribut kebijakan Dekode JWT.
Atribut yang berlaku untuk elemen tingkat atas
<DecodeJWT name="JWT" continueOnError="false" enabled="true" async="false">
Atribut berikut umum untuk semua elemen induk kebijakan.
| Atribut | Deskripsi | Default | Keberadaan |
|---|---|---|---|
| nama |
Nama internal kebijakan. Karakter yang dapat Anda gunakan dalam nama dibatasi untuk:
A-Z0-9._\-$ %. Namun, UI pengelolaan Edge 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. Ini adalah perilaku yang diharapkan
untuk sebagian besar kebijakan.
Tetapkan ke |
false | Opsional |
| diaktifkan |
Tetapkan ke true untuk menerapkan kebijakan.
Tetapkan ke |
true | Opsional |
| asinkron | 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 bahasa alami yang berbeda.
| Default | Jika Anda menghapus elemen ini, nilai atribut nama kebijakan akan digunakan. |
| Keberadaan | Opsional |
| Jenis | String |
<Source>
<Source>jwt-variable</Source>
Jika ada, menentukan flow variable tempat kebijakan diharapkan menemukan JWT untuk didekode.
| Default | request.header.authorization (Lihat catatan di atas untuk mengetahui informasi penting
tentang default). |
| Keberadaan | Opsional |
| Jenis | String |
| Nilai yang valid | Nama variabel alur Edge |
Variabel flow
Setelah berhasil, kebijakan Verifikasi JWT dan Dekode JWT akan ditetapkan 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 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 {i> nbf<i}, variabel ini akan berisi nilai, yang diekspresikan dalam milidetik sejak epoch. |
claim.subject |
Klaim subjek JWT. |
claim.name |
Nilai klaim yang dinamai (standar atau tambahan) dalam payload. Salah satunya akan ditetapkan untuk setiap klaim dalam payload. |
decoded.claim.name |
Nilai JSON yang dapat diuraikan dari klaim bernama (standar atau tambahan) dalam payload. Satu variabel ditetapkan untuk
setiap klaim dalam payload. Misalnya, Anda dapat menggunakan decoded.claim.iat untuk
mengambil waktu diterbitkan pada JWT, dinyatakan dalam detik sejak epoch. Sementara Anda
dapat juga menggunakan variabel alur claim.name, ini adalah
variabel yang direkomendasikan untuk digunakan mengakses klaim. |
decoded.header.name |
Nilai header yang dapat diurai JSON dalam payload. Satu variabel ditetapkan untuk
setiap {i>header<i} dalam {i>payload<i}. Meskipun Anda juga dapat menggunakan variabel flow header.name,
variabel ini adalah variabel yang direkomendasikan
untuk mengakses {i>header<i}. |
expiry_formatted |
Tanggal/waktu habis masa berlaku, 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)" pada JWT ringkasan kebijakan untuk memverifikasi JWT. Lihat Parameter Header(Key ID) untuk mengetahui informasi selengkapnya. |
header.type |
Akan ditetapkan ke JWT. |
header.name |
Nilai header bernama (standar atau tambahan). Salah satunya akan ditetapkan untuk setiap {i>header<i} tambahan di bagian {i> header<i} 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 token berakhir. Jika masa berlaku token telah berakhir, angkanya akan negatif. |
time_remaining_formatted |
Sisa waktu sebelum token akan habis masa berlakunya, diformat sebagai string yang dapat dibaca manusia. Contoh: 00:59:59.926 |
valid |
Dalam kasus VerifyJWT, variabel ini akan bernilai benar
ketika tanda tangan diverifikasi, dan
waktu saat ini adalah sebelum masa berlaku token habis, dan setelah nilai token {i>notBefore<i}, jika
tersedia. Jika tidak, flag akan bernilai 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 | Di 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 menangkap bagian errorcode dari error
yang dihasilkan. 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>