Kebijakan DecodeJWT

Halaman ini berlaku untuk Apigee dan Apigee hybrid.

Lihat dokumentasi Apigee Edge.

ikon kebijakan

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

Kebijakan ini adalah Kebijakan standar dan dapat di-deploy ke jenis lingkungan apa pun. Untuk mengetahui informasi tentang jenis kebijakan dan ketersediaan dengan setiap jenis lingkungan, lihat Jenis kebijakan.

Video

Tonton video singkat untuk mempelajari cara mendekode JWT.

Contoh: Mendekode JWT

Kebijakan yang ditampilkan di bawah mendekode JWT yang ditemukan di variabel alur var.jwt. Variabel ini harus ada dan berisi JWT yang valid (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 menulis output-nya ke variabel konteks sehingga kebijakan atau kondisi berikutnya di proxy API dapat memeriksa nilai tersebut. Lihat Variabel alur untuk mengetahui daftar variabel yang ditetapkan oleh kebijakan ini.

Referensi elemen untuk Mendekode JWT

Referensi kebijakan menjelaskan elemen dan atribut kebijakan Decode JWT.

Atribut yang berlaku untuk elemen tingkat atas

<DecodeJWT name="JWT" 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 Apigee menerapkan batasan tambahan, seperti menghapus karakter yang bukan alfanumerik secara otomatis.

Secara opsional, gunakan elemen <displayname></displayname> untuk memberi label pada kebijakan di editor proxy UI Apigee dengan nama bahasa alami yang berbeda.

T/A Wajib
continueOnError Tetapkan ke false untuk menampilkan error saat kebijakan gagal. Perilaku ini wajar terjadi untuk sebagian besar kebijakan.

Tetapkan ke true agar eksekusi alur berlanjut meskipun setelah 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.

benar Opsional
asinkron Atribut ini tidak digunakan lagi. false Tidak digunakan lagi

<DisplayName>

<DisplayName>Policy Display Name</DisplayName>

Gunakan selain atribut nama untuk memberi label pada kebijakan di editor proxy UI Apigee dengan nama bahasa alami yang berbeda.

Default Jika Anda menghapus elemen ini, nilai atribut nama kebijakan akan digunakan.
Kehadiran Opsional
Jenis String

<Source>

<Source>jwt-variable</Source>

Jika ada, menentukan variabel alur tempat kebijakan mengharapkan untuk menemukan JWT 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 Apigee

Variabel alur

Setelah berhasil, kebijakan Verify JWT dan Decode JWT akan menetapkan 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 diterbitkan, dinyatakan dalam milidetik sejak epoch.
claim.issuer Klaim penerbit JWT.
claim.notbefore Jika JWT menyertakan klaim nbf, variabel ini akan berisi nilai, yang dinyatakan dalam milidetik sejak epoch.
claim.subject Klaim subjek JWT.
claim.name Nilai klaim bernama (standar atau tambahan) dalam payload. Salah satunya akan ditetapkan untuk setiap klaim dalam payload.
decoded.claim.name Nilai klaim bernama (standar atau tambahan) yang dapat diuraikan JSON dalam payload. Satu variabel ditetapkan untuk setiap klaim dalam payload. Misalnya, Anda dapat menggunakan decoded.claim.iat untuk mengambil waktu penerbitan JWT, yang dinyatakan dalam detik sejak epoch. Meskipun Anda juga dapat menggunakan variabel alur claim.name, ini adalah variabel yang direkomendasikan untuk digunakan guna mengakses klaim.
decoded.header.name Nilai header yang dapat diuraikan JSON dalam payload. Satu variabel ditetapkan untuk setiap header dalam payload. Meskipun Anda juga dapat menggunakan variabel alur header.name, variabel ini direkomendasikan untuk digunakan guna mengakses header.
expiry_formatted Tanggal/waktu habis masa berlaku, yang 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)" di ringkasan kebijakan JWT untuk memverifikasi JWT. Lihat Parameter Header(ID Kunci) untuk mengetahui informasi selengkapnya.
header.type Akan ditetapkan ke JWT.
header.name Nilai header bernama (standar atau tambahan). Salah satunya akan ditetapkan untuk setiap header tambahan di bagian header 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 masa berlaku token berakhir. Jika masa berlaku token telah berakhir, angka ini akan negatif.
time_remaining_formatted Waktu yang tersisa sebelum token berakhir, diformat sebagai string yang dapat dibaca manusia. 00:59:59.926
valid Dalam kasus VerifyJWT, variabel ini akan bernilai benar saat tanda tangan diverifikasi, dan waktu saat ini sebelum masa berlaku token berakhir, dan setelah nilai notBefore token, jika ada. Jika tidak, flag akan bernilai salah.

Dalam kasus DecodeJWT, variabel ini tidak ditetapkan.

Referensi error

Bagian ini menjelaskan kode error dan pesan error yang ditampilkan serta variabel error yang ditetapkan oleh Apigee saat kebijakan ini memicu error. Informasi ini penting untuk diketahui jika Anda mengembangkan aturan error untuk menangani error. Untuk mempelajari lebih lanjut, lihat Yang perlu Anda ketahui tentang error kebijakan dan Menangani error.

Error runtime

Error ini dapat terjadi saat kebijakan dieksekusi.

Kode kerusakan 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 alur yang ditentukan dalam elemen <Source> kebijakan tidak ada.
steps.jwt.InvalidToken 401 Terjadi saat variabel alur yang ditentukan dalam elemen <Source> kebijakan berada di luar cakupan atau tidak dapat di-resolve.

Error saat deployment

Error ini dapat terjadi saat Anda men-deploy proxy yang berisi kebijakan ini.

Nama error Penyebab Perbaiki
InvalidEmptyElement Terjadi saat variabel alur yang berisi JWT yang akan didekode tidak ditentukan dalam elemen <Source> kebijakan.

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 "InvalidToken"
JWT.failed Semua kebijakan JWT menetapkan variabel yang sama jika terjadi kegagalan. JWT.failed = true

Contoh respons error

Kode Error Kebijakan JWT

Untuk penanganan error, praktik terbaiknya adalah menangkap bagian errorcode dari respons error. Jangan mengandalkan teks di faultstring, karena teks tersebut dapat berubah.

Contoh aturan error

    <FaultRules>
        <FaultRule name="JWT Policy Errors">
            <Step>
                <Name>JavaScript-1</Name>
                <Condition>(fault.name Matches "InvalidToken")</Condition>
            </Step>
            <Condition>JWT.failed=true</Condition>
        </FaultRule>
    </FaultRules>