Best Practice Lumen RESTful API – Bagian 4 Otentikasi JWT

Untuk mengamankan endpoint yang terdapat pada aplikasi Lumen, kita dapat melakukannya dengan berbagai cara; salah satunya dengan menggunakan JWT. Singkat cerita Otentikasi JWT (JSON Web Token) digunakan untuk membatasi hak akses terhadap suatu resource (dalam hal ini endpoint).

Sederhananya, jika kita memiliki data pada alamat domain.tld/users/ dan kita tidak ingin data tersebut diakses secara sembarangan oleh publik, kita bisa mengamankannya dengan JWT. Atau dalam kasus lain jika kita ingin user dengan hak akses tertentu saja yang bisa mengakses halaman tersebut, kita juga bisa menggunakan JWT untuk menanganinya.

Lalu, sebenarnya apa itu JWT? JWT adalah metode otentikasi yang menyandikan data ke dalam sebuah payload. Payload adalah enkapsulasi dari berbagai macam data (dalam kasus JWT biasanya: header, data, dsb). Sedangkan enkapsulasi adalah proses pembungkusan banyak data ke dalam satu paket data (bayangkan seperti memasukan banyak barang ke dalam kardus).

Instal JWT

require firebase jwt ngaret com
Gambar oleh: ngaret.com

Jika kita tidak ingin repot untuk menggunakan JWT, kita bisa menggunakan package yang sudah banyak disediakan. Dalam kasus Lumen yang menggunakan bahasa pemrograman PHP, kita bisa menggunakan package firebase/php-jwt. Install package tersebut menggunakan composer: composer require firebase/php-jwt

Tambah token unique

add jwt secret ngaret com
Gambar oleh: ngaret.com

Untuk menggunakan JWT, kita membutuhkan token unique yang digunakan sebagai penanda bahwa “benar ini adalah request dari saya“. Tambahkan token identifier pada aplikasi kita. Cara yang paling ngaret rekomendasikan adalah melalui .env, yakni dengan menambahkan variable JWT_TOKEN (atau apapun namanya, bebas). Dan, pastikan APP_KEY aplikasi kita sudah terisi.

Metode otentikasi

auth controller jwt ngaret com
Gambar oleh: ngaret.com

Buatlah sebuah controller yang berfungsi untuk menangani request terkait otentikasi yang akan dilakukan. Sama halnya seperti otentikasi biasa (menggunakan email/username dan password), metode otentikasi JWT ini hanya mengganti atau merepresentasikan user (identifier) ke dalam token (encoded token)

Buat JWT Middleware

add jwt middleware ngaret com
Gambar oleh: ngaret.com

Buatlah sebuah middleware yang nantinya akan berfungsi untuk menangani setiap request yang masuk (nanti di-setting di route). Middleware ini berfungsi untuk memeriksa apakah request berisikan token (JWT) dan memeriksa apakah token tersebut valid atau tidak. Jika tidak, middleware akan mengembalikan exception atau pesan kesalahan.

enable jwt middleware ngaret com
Gambar oleh: ngaret.com

Setelah menambahkan middleware, pastikan bahwa middleware tersebut sudah di-load. Tambahkan pengaturan load tersebut pada file app.php yang terdapat di folder bootstrap.

Gunakan middleware

apply jwt middleware route ngaret com
Gambar oleh: ngaret.com

Gunakan middleware yang sudah dibuat dengan menambahkannya pada file route.php. Terapkan untuk setiap endpoint yang ingin diamankan.

Uji coba

test login jwt wrong ngaret com
Gambar oleh: ngaret.com

Uji coba dengan username dan password yang salah.

test direct access without token ngaret com
Gambar oleh: ngaret.com

Uji coba akses endpoint yang menerapkan JWT tanpa token JWT.

test access endpoint with token ngaret com
Gambar oleh: ngaret.com

Uji coba mengakses endpoint dengan tambahkan akses token pada endpoint (alamat url).

Sebagai catatan, jika aplikasi yang kita bangun memerlukan akses yang lama (agar token tidak mudah expired dan user tidak logout terus) kita harus menaikan expired time menjadi maksimum (misal 3 tahun wkwk), kenapa tidak ada unlimited token jwt? Hal ini tidak direkomendasikan karena tidak sesuai dengan kaidah otentikasi, cheers!

Summary
Review Date
Author Rating
51star1star1star1star1star
(Visited 487 times, 3 visits today)
News Reporter
Banyak orang menyebutku sebagai seorang petualang, dan itulah aku --hanya satu hal bedanya: seseorang yang mengorbankan kulit luarnya untuk membuktikan kebenaran di dalamnya. (1965) ~Ernesto "Che" Guevara

Leave a Reply

Leave a Reply

Your email address will not be published. Required fields are marked *