Kebijakan DecodeJWS

Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

Apa

Mendekode header JWS tanpa memverifikasi tanda tangan pada JWS, dan menulis setiap header ke flow variable. Kebijakan ini paling berguna jika digunakan bersama dengan kebijakan VerifyJWS, saat 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 terpisah, dan berbentuk:

header..signature

Kebijakan DecodeJWS berfungsi dengan kedua bentuk tersebut 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.

Video

Tonton video pendek untuk mempelajari cara mendekode JWT. Meskipun video ini khusus untuk JWT, banyak konsepnya sama dengan JWS.

Contoh: Mendekode JWS

Kebijakan yang ditampilkan di bawah mendekode JWS yang ditemukan dalam flow variable var.JWS. Variabel ini harus ada dan berisi JWS yang dapat digunakan (dapat didekode). Kebijakan ini dapat memperoleh JWS dari flow variable 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 menetapkan variabel alur bernama:

jws.policy-name.header.header-name

Jika JWS memiliki payload terlampir, maka JWS akan menetapkan flow variable jws.policy-name.header.payload ke payload. Untuk payload yang tidak terlampir, 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 diterapkan ke elemen tingkat teratas

<DecodeJWS name="JWS" 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 pengelolaan Edge menerapkan batasan tambahan, seperti menghapus karakter yang bukan alfanumerik secara otomatis.

Secara opsional, gunakan elemen <displayname></displayname> untuk melabeli kebijakan di editor proxy UI pengelolaan dengan nama bahasa alami yang berbeda.

T/A Wajib
continueOnError Setel ke false untuk menampilkan error saat kebijakan gagal. Hal ini adalah perilaku yang diharapkan untuk sebagian besar kebijakan.

Setel ke true agar eksekusi alur berlanjut meskipun kebijakan gagal.

false Opsional
diaktifkan Setel ke true untuk menerapkan kebijakan.

Setel ke false untuk "menonaktifkan" kebijakan. Kebijakan tidak akan diterapkan meskipun tetap terlampir pada alur.

true Opsional
asinkron 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
Jenis String

<Source>

<Source>JWS-variable</Source>

Jika ada, menentukan flow variable tempat kebijakan mengharapkan untuk menemukan JWS 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 Edge

Variabel flow

Setelah berhasil, kebijakan Verifikasi JWS dan Dekode JWS akan ditetapkan variabel konteks sesuai dengan pola ini:

jws.{policy_name}.{variable_name}

Misalnya, jika nama kebijakan adalah verify-jws, kebijakan akan menyimpan algoritma yang ditentukan dalam JWS untuk variabel konteks ini: jws.verify-jws.header.algorithm

Nama variabel Deskripsi
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}.
header.algorithm Algoritma penandatanganan yang digunakan pada JWS. Misalnya, RS256, HS384, dan sebagainya. Lihat Parameter Header(Algoritma) untuk mengetahui informasi selengkapnya.
header.kid ID Kunci, jika ditambahkan saat JWS dibuat. Lihat juga "Menggunakan Kumpulan Kunci Web JSON (JWKS)" di JWT dan JWS ringkasan kebijakan untuk memverifikasi JWS. Lihat Parameter Header(Key ID) untuk mengetahui informasi selengkapnya.
header.type Nilai jenis header. Lihat Parameter Header(Jenis) untuk mengetahui informasi selengkapnya.
header.name Nilai header bernama (standar atau tambahan). Salah satunya akan ditetapkan untuk setiap {i>header<i} tambahan di bagian {i> header<i} JWS.
header-json Header dalam format JSON.
payload Payload JWS jika JWS memiliki payload yang terpasang. Untuk payload yang dilepas, variabel ini kosong.
valid Dalam kasus VerifyJWS, 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 DecodeJWS, 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 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.

EmptyElementForKeyConfiguration

FailedToResolveVariable

InvalidConfigurationForActionAndAlgorithmFamily

InvalidConfigurationForVerify

InvalidEmptyElement

InvalidFamiliesForAlgorithm

InvalidKeyConfiguration

InvalidNameForAdditionalClaim

InvalidNameForAdditionalHeader

InvalidPublicKeyId

InvalidPublicKeyValue

InvalidSecretInConfig

InvalidTypeForAdditionalClaim

InvalidTypeForAdditionalHeader

InvalidValueForElement

InvalidValueOfArrayAttribute

InvalidVariableNameForSecret

MissingConfigurationElement

MissingElementForKeyConfiguration

MissingNameForAdditionalClaim

MissingNameForAdditionalHeader

Kemungkinan error deployment lainnya.

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 error adalah bagian terakhir dari kode error. fault.name Matches "TokenExpired"
JWS.failed Semua kebijakan JWS menetapkan variabel yang sama jika terjadi kegagalan. jws.JWS-Policy.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="JWS Policy Errors">
        <Step>
            <Name>JavaScript-1</Name>
            <Condition>(fault.name Matches "TokenExpired")</Condition>
        </Step>
        <Condition>JWS.failed=true</Condition>
    </FaultRule>
</FaultRules>