Kebijakan DecodeJWT

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 <displayname></displayname> untuk memberi label kebijakan di editor proxy UI pengelolaan dengan nama bahasa alami yang berbeda.

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

Tetapkan ke true agar eksekusi alur berlanjut meskipun kebijakan gagal.

false Opsional
diaktifkan Tetapkan ke true untuk menerapkan kebijakan.

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

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.
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.

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.

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

Kode Kesalahan Kebijakan JWT

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>