Halaman ini berlaku untuk Apigee dan Apigee Hybrid.
Baca dokumentasi Apigee Edge.
Apa
Mendekode header JWS tanpa memverifikasi tanda tangan di JWS, dan menulis setiap header ke variabel flow. Kebijakan ini paling berguna saat digunakan bersama dengan kebijakan VerifyJWS, ketika nilai header dari dalam JWS harus diketahui sebelum memverifikasi tanda tangan JWS.
JWS dapat memiliki payload terlampir, seperti dalam bentuk:
header.payload.signature
Atau, JWS dapat menghilangkan payload, yang disebut payload detached, dan berbentuk:
header..signature
Kebijakan DecodeJWS berfungsi dengan kedua formulir karena hanya mendekode bagian header JWS. Kebijakan DecodeJWS juga berfungsi terlepas dari algoritma yang digunakan untuk menandatangani JWS.
Lihat ringkasan kebijakan JWS dan JWT untuk pengantar mendetail dan ringkasan format JWS.
Kebijakan ini merupakan Kebijakan yang dapat diperluas, dan penggunaan kebijakan ini mungkin memiliki implikasi biaya atau pemanfaatan, bergantung pada lisensi Apigee Anda. Untuk mengetahui informasi tentang jenis kebijakan dan implikasi penggunaan, lihat Jenis kebijakan.
Video
Tonton video singkat untuk mempelajari cara mendekode JWT. Meskipun video ini khusus untuk JWT, banyak konsep yang sama untuk JWS.
Contoh: Mendekode JWS
Kebijakan yang ditampilkan di bawah ini mendekode JWS yang ditemukan dalam variabel alur var.JWS. Variabel ini harus ada dan berisi JWS yang dapat di-degradasi. Kebijakan ini dapat memperoleh JWS dari variabel alur apa pun.
<DecodeJWS name="JWS-Decode-HS256"> <DisplayName>JWS Verify HS256</DisplayName> <Source>var.JWS</Source> </DecodeJWS>
Untuk setiap header di bagian header JWS, kebijakan menyetel variabel flow dengan nama:
jws.policy-name.header.header-name
Jika JWS memiliki payload yang terpasang, JWS akan menetapkan variabel alur jws.policy-name.header.payload
ke payload tersebut. Untuk payload terpisah, payload
kosong.
Lihat Variabel alur untuk mengetahui daftar lengkap variabel yang ditetapkan oleh kebijakan ini.
Referensi elemen untuk Decode JWS
Referensi kebijakan menjelaskan elemen dan atribut kebijakan Decode JWS.
Atribut yang berlaku untuk elemen level atas
<DecodeJWS name="JWS" 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 Anda gunakan dalam nama dibatasi untuk:
A-Z0-9._\-$ % . Namun, UI Apigee menerapkan pembatasan tambahan, misalnya penghapusan otomatis karakter yang bukan alfanumerik.
Atau, gunakan elemen |
T/A | Diperlukan |
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 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. |
Kehadiran | Opsional |
Type | String |
<Sumber>
<Source>JWS-variable</Source>
Jika ada, tentukan variabel flow yang diharapkan kebijakan untuk menemukan JWS yang akan didekode.
Default | request.header.authorization (Lihat catatan di atas untuk informasi penting
tentang default). |
Kehadiran | Opsional |
Type | String |
Nilai yang valid | Nama variabel flow Apigee |
Flow variables
Upon success, the Verify JWS and Decode JWS policies set context variables according to this pattern:
jws.{policy_name}.{variable_name}
For example, if the policy name is verify-jws
, then the policy will store
the algorithm specified in the JWS to this context variable:
jws.verify-jws.header.algorithm
Variable name | Description |
---|---|
decoded.header.name |
The JSON-parsable value of a header in the payload. One variable is set for
every header in the payload. While you can also use the header.name flow variables,
this is the recommended variable to use to access a header. |
header.algorithm |
The signing algorithm used on the JWS. For example, RS256, HS384, and so on. See (Algorithm) Header Parameter for more. |
header.kid |
The Key ID, if added when the JWS was generated. See also "Using a JSON Web Key Set (JWKS)" at JWT and JWS policies overview to verify a JWS. See (Key ID) Header Parameter for more. |
header.type |
The header type value. See (Type) Header Parameter for more. |
header.name |
The value of the named header (standard or additional). One of these will be set for every additional header in the header portion of the JWS. |
header-json |
The header in JSON format. |
payload |
The JWS payload if the JWS has an attached payload. For a detached paylod, this variable is empty. |
valid |
In the case of VerifyJWS, this variable will be true when the signature is verified, and
the current time is before the token expiry, and after the token notBefore value, if they
are present. Otherwise false.
In the case of DecodeJWS, this variable is not set. |
Referensi error
Bagian ini menjelaskan kode kesalahan dan pesan error yang ditampilkan dan variabel kesalahan yang disetel oleh Apigee 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 | Terjadi saat |
---|---|---|
steps.jws.FailedToDecode |
401 |
Kebijakan tidak dapat mendekode JWS. JWS mungkin rusak. |
steps.jws.FailedToResolveVariable |
401 |
Terjadi saat variabel flow yang ditentukan dalam elemen <Source>
kebijakan tidak ada. |
steps.jws.InvalidClaim |
401 |
Karena klaim atau klaim tidak cocok, atau ketidakcocokan header atau header tidak ada. |
steps.jws.InvalidJsonFormat |
401 |
JSON yang tidak valid ditemukan di header JWS. |
steps.jws.InvalidJws |
401 |
Error ini terjadi saat verifikasi tanda tangan JWS gagal. |
steps.jws.InvalidPayload |
401 |
Payload JWS tidak valid. |
steps.jws.InvalidSignature |
401 |
<DetachedContent> dihilangkan dan JWS memiliki payload konten terpisah. |
steps.jws.MissingPayload |
401 |
Payload JWS tidak ada. |
steps.jws.NoAlgorithmFoundInHeader |
401 |
Terjadi saat JWS menghilangkan header algoritma. |
steps.jws.UnknownException |
401 |
Terjadi pengecualian yang tidak diketahui. |
Error saat deployment
Error ini dapat terjadi saat Anda men-deploy proxy yang berisi kebijakan ini.
Nama error | Terjadi saat |
---|---|
InvalidAlgorithm |
Satu-satunya nilai yang valid adalah: RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512,
HS256, HS384, HS512 . |
|
Kemungkinan error deployment lainnya. |
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" |
JWS.failed |
All JWS policies set the same variable in the case of a failure. | jws.JWS-Policy.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="JWS Policy Errors"> <Step> <Name>JavaScript-1</Name> <Condition>(fault.name Matches "TokenExpired")</Condition> </Step> <Condition>JWS.failed=true</Condition> </FaultRule> </FaultRules>