Permasalahan Penggunaan JWT dan Solusinya dengan PASETO
Permasalahan Penggunaan JWT dan Solusinya dengan PASETO
Pengantar
Dalam pengembangan aplikasi web dan mobile saat ini, token-based authentication menjadi metode yang sangat populer untuk mengelola otentikasi pengguna. Salah satu jenis token yang paling sering digunakan adalah JSON Web Token (JWT). Meskipun banyak digunakan, standar JWT memiliki beberapa kelemahan serius dari sisi keamanan, yang telah terbukti berbahaya.
Artikel ini akan mengulas secara menyeluruh mengenai permasalahan keamanan JWT, dan bagaimana PASETO (Platform Agnostic Security Token) hadir sebagai solusi yang lebih aman dan sederhana.
Cara Kerja Otentikasi Berbasis Token
Pada dasarnya, otentikasi token bekerja sebagai berikut:
Login: Klien (pengguna) mengirimkan username dan password ke server.
Token Diterbitkan: Jika data benar, server menghasilkan dan menandatangani token, lalu mengirimkan token itu kembali kepada klien.
Akses Resource: Klien menggunakan token tersebut untuk mengakses resource lain dengan menyisipkannya ke dalam header permintaan (request).
Validasi Token: Server memverifikasi token dan memberikan respon sesuai jika token valid.
Struktur dan Mekanisme JWT
JWT terdiri dari tiga bagian yang dipisahkan oleh tanda titik (.
):
Header: Berisi tipe token (JWT) dan algoritma penandatanganan (misalnya, HS256).
Payload: Menyimpan data pengguna seperti
username
,exp
(waktu kedaluwarsa), danjti
(ID token).Signature: Merupakan tanda tangan digital untuk memverifikasi keaslian token.
Namun, penting untuk dicatat bahwa payload hanya di-encode (base64), bukan dienkripsi, sehingga siapa pun bisa membaca isi token tanpa membutuhkan kunci rahasia.
Permasalahan Keamanan pada JWT
Terlalu Banyak Pilihan Algoritma: JWT mendukung banyak algoritma, termasuk yang sudah diketahui rentan (contoh: RSA PKCSv1.5 yang rentan terhadap padding oracle attack). Ini membingungkan developer dan membuka celah kesalahan konfigurasi.
Header Dapat Dimanipulasi: Informasi algoritma disimpan di header token. Penyerang bisa mengubah algoritma menjadi
"none"
untuk melewati proses verifikasi signature jika implementasi server tidak hati-hati.Serangan Algoritma Simetris Palsu: Misalnya, server menggunakan RS256 (asymmetric), tapi penyerang membuat token palsu dengan header
alg: HS256
(symmetric) dan menandatanganinya menggunakan public key server. Jika server tidak memverifikasi algoritma yang digunakan, maka token palsu itu bisa dianggap valid.Payload Tidak Aman: Karena payload hanya di-encode, bukan dienkripsi, informasi sensitif bisa dibaca oleh siapa saja yang memegang token.
Solusi: Menggunakan PASETO
PASETO hadir untuk menggantikan JWT dengan desain yang lebih aman dan lebih mudah digunakan. Perbedaan utamanya meliputi:
Tanpa Pilihan Algoritma: Developer hanya memilih versi PASETO (v1 atau v2). Setiap versi sudah memiliki algoritma kriptografi yang kuat dan tetap.
Payload Aman: Untuk penggunaan lokal (dengan kunci simetris), PASETO mengenkripsi dan mengautentikasi seluruh isi token menggunakan AEAD (Authenticated Encryption with Associated Data), bukan hanya base64 encoding.
Tanpa Header Algoritma: Karena tidak ada bagian algoritma di token, penyerang tidak bisa mengganti algoritma seperti di JWT.
Desain Lebih Modern:
Versi 1: Menggunakan AES-CTR + HMAC-SHA384 (simetris) dan RSA-PSS + SHA384 (asimetris).
Versi 2: Menggunakan XChaCha20 + Poly1305 (simetris) dan Ed25519 (asimetris), yang lebih modern dan efisien.
Struktur Token: PASETO memiliki struktur:
Versi (v2)
Tujuan (local/public)
Payload (dienkripsi atau di-encode tergantung tujuannya)
(Opsional) Footer untuk metadata publik
Kesimpulan
JWT, meskipun populer, memiliki banyak kelemahan desain yang membuka potensi serangan jika tidak digunakan dengan sangat hati-hati. PASETO menyederhanakan banyak aspek ini, sekaligus meningkatkan keamanan secara signifikan. Bagi pengembang yang ingin membangun aplikasi dengan otentikasi yang aman dan minim risiko kesalahan konfigurasi, beralih ke PASETO adalah pilihan yang bijak.
Last updated