jwt

Tutorial Penggunaan JSON Web Token (JWT) Menggunakan PHP

Pada artikel ini saya akan menjelaskan tentang apa itu JWT dan bagaimana cara kerjanya. Selain itu kita akan belajar bagaimana cara membuat JWT dengan menggunakan PHP.

Sebelum kita mulai, pertama kita harus memahami terlebih dahulu definisi dari JSON Web Token tersebut.

JSON Web Token (JWT) adalah sebuah JSON Object yang didefinisikan dalam RFC 7519 sebagai cara aman untuk mewakili sekumpulan informasi antara dua pihak. Token terdiri dari header, content, dan signature.

Sederhananya, JSON Web Token adalah sebuah string yang memiliki format sebagai berikut :

Untuk menunjukkan bagaimana dan mengapa JWT benar-benar digunakan, kita akan menggunakan contoh 3 entitas sederhana (lihat diagram di bawah). Entitas dalam contoh ini adalah user, server aplikasi, dan server otentikasi.

Server otentikasi akan menyediakan JSON Web Token kepada user. Dengan JSON Web Token, user dapat berkomunikasi dengan aplikasi dengan aman.

jwt

Pada gambar diatas, user pertama kali masuk ke server otentikasi menggunakan sistem masuk server otentikasi (contoh. username dan password login).

Server otentikasi kemudian membuat JSON Web Token dan mengirimkannya ke user. Ketika user membuat panggilan API ke aplikasi, user menyertakan JWT bersama dengan panggilan API tersebut.

Dalam pengaturan ini, server aplikasi akan dikonfigurasikan untuk memverifikasi bahwa JSON Web Token yang masuk dibuat oleh server otentikasi.

Jadi, ketika user membuat request API dengan JSON Web Token, aplikasi dapat menggunakan JSON Web Token untuk memverifikasi bahwa request berasal dari user yang diotentikasi.

Sekarang kita akan menggali lebih dalam tentang konsep JSON Web Token dan langkah-langkah proses dari pembuatan hingga proses verifikasi.

1. JSON Web Token (JWT) #Header

Header adalah sebuah komponen dari JSON Web Token yang berisi informasi tentang bagaimana proses kalkulasi & enkripsi untuk Signature dari JWT tersebut.

Header dari JSON Web Token itu sendiri adalah sebuah JSON Object dalam format sebagai berikut :

Dalam JSON diatas, value dari “typ” menentukan bahwa object adalah JSON Web Token, dan value “alg” menentukan algoritma hashing yang digunakan untuk membuat komponen Signature JSON Web Token.

Dalam contoh ini kita menggunakan algoritma HMAC-SHA256, algoritma hashing yang menggunakan secret key untuk menghitung signature (dibahas lebih rinci dalam langkah 3). Kode untuk membuat header diatas adalah sebagai berikut :

2. JSON Web Token (JWT) #Payload

Payload adalah salah satu komponen dari JSON Web Token yang berisikan data informasi yang dikirim dari user. Sebagai contoh, kita akan meyisipkan data useriD kedalam JSON Web Token sebagai berikut :

Pada contoh diatas saya hanya menyisipkan 1 data saja ke dalam payload. Kamu bisa menyisipkan data sebanyak apapun kedalam JSON Web Token dengan catatan bahwa semakin banyak data yang disisipkan maka ukuran dari JWT itu sendiri semakin besar. Kondisi ini dapat mempengaruhi kecepatan pengiriman data.

3. JSON Web Token (JWT) #Signature

Pada bagian ini kita akan membuat signature untuk JSON Web Token. Signature adalah hasil dari enkripsi dari header dan payload dengan menggunakan metode enkripsi HMAC-SHA256.

Pada algoritma diatas signature dibuat dengan mengenkripsi header dan payload yang sudah dibuat pada langkah 1 dan 2 dengan menggunakan metode base64encode.

hasil dari enkripsi tersebut lalu di enkripsi kembali dengan menggunakan metode HMAC-SHA256 lalu yang terakhir di enkripsi kembali ke bentuk base64encode.

4. JSON Web Token (JWT) #Penggabungan

Pada langkah yang terakhir kita tinggal menggabungkan 3 komponen barusan yang sudah kita encode dengan menggunakan tanda titik (.) sebagai pemisah antar komponen tersebut. Hasilnya maka akan seperti dibawah ini:

Setelah ini maka kita sudah bisa mengirimkan JSON Web Token (JWT) ke server.

Data JWT yang sudah dikirim ke server dapat disimpan ke dalam database untuk keperluan otentikasi, untuk caranya kamu bisa mengunjungi artikel ini yang membahas bagaimana cara untuk menyimpan data json kedalam database MySQL.

Kamu juga dapat memanfaatkan library khusus untuk membuat JSON Web Token di https://jwt.io. Selain PHP tersedia juga untuk bahasa pemrograman yang lainnya.

Semoga Bermanfaat

Post Author: El Cicko

Nama saya Riky Fahri Hasibuan, Saya yang biasa nulis di blog ini. Blog ini adalah sarana dokumentasi dari apa yang saya kerjakan dan tidak ada salahnya juga saya sebarkan. Jika artikel di blog bermanfaat, kamu bisa memberikan apresiasi pada blog ini dengan memberikan donasi pada blog ini.