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
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
steps.jwt.FailedToDecode |
401 | Occurs when the policy is unable to decode the JWT. The JWT may be malformed, invalid or otherwise not decodable. | build |
steps.jwt.FailedToResolveVariable |
401 | Occurs when the flow variable specified in the <Source> element of
the policy does not exist. |
|
steps.jwt.InvalidToken |
401 | Occurs when the flow variable specified in the <Source> element of
the policy is out of scope or can't be resolved. |
build |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
| Error name | Cause | Fix |
|---|---|---|
InvalidEmptyElement |
Occurs when the flow variable containing the JWT to be decoded is not specified in the
<Source> element of the policy.
|
build |
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
| Variables | Where | Example |
|---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "TokenExpired" |
JWT.failed |
All JWT policies set the same variable in the case of a failure. | JWT.failed = true |
Example error response
For error handling, the best practice is to trap the errorcode part of the error
response. Do not rely on the text in the faultstring, because it could change.
Example fault rule
<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>