Membuat Autentikasi Token Akses Expire Untuk Back End Web Service

tataadin.blogspot.com

Latar Belakang

Web Service adalah sebuah implementasi dari API (Application Programming Interface) yang merupakan suatu “penghubung” yang memungkinkan suatu aplikasi untuk berinteraksi dengan aplikasi lainnya dan berbagi data. Web Service seperti sebuah alamat web, bedanya alamat web service hanya akan mengerjakan permintaan dan mengembalikan hasilnya biasanya berupa JSON tanpa menampilkan GUI apapun.

Web Service menggunakan parameter yang dikirim dengan method seperti web pada umumnya yaitu GET dan POST, adapula PUT, DELETE dan lain lain namun untuk method selain GET dan POST memerlukan konfigurasi khusus. Pada beberapa kasus untuk mengakses Web Service dibutuhkan kode autentikasi (Token Akses) yang telah diizinkan untuk melihat data yang diinginkan. Semua aturan dalam permintaan dan respon ini ditentukan oleh programmer yang membuatnya.

Demi keamanan dalam beberapa kasus web service tidak hanya menggunakan API KEY sebagai autentikasi namun juga menggunakan token akses yang memiliki batas waktu penggunaan atau waktu kadaluarsa. Jangka waktunya beragam, ada yang dalam hitungan menit ada pula yang beberapa jam. Token akses yang memiliki waktu kadaluarsa ini umumnya digunakan pada Token Akses untuk aplikasi Mobile sebagai pengganti session.

Pembahasan

Pada artikel ini akan menjelaskan cara membuat autentikasi token expire pada sisi server database dengan query. Langkah-langkah membuat token expire adalah sebagai berikut :

  1. Persiapkan sebuah field untuk menyimpan aktivitas login pada tabel yang digunakan untuk login, jika menggunakan framework seperti laravel maka otomatis akan dibuatkan sebuah field bernama updated_at. Contoh Tabelnya adalah seperti dibawah ini :
    Nama Tipe Role
    id_user Varchar FOREIGN KEY
    remember_token Varchar PRIMARY KEY
    updated_at Date/Time
    Jika ingin menyimpan tanggal kadaluarsa pada database maka buatkan satu lagi field bernama expired_at, namun perlu algoritma lagi untuk menghitung tanggal kadaluarsa. Pada artikel ini untuk mengetahui token sudah kadaluarsa atau belum didapat dengan cara menghitung selisih waktu login dengan waktu request dilakukan.
  2. Buat autentikasi token akses pada middleware, untuk yang belum familiar dengan framework silakan buat dimana saja sebelum request yang sebenarnya dieksekusi. Middleware berguna untuk filter request user sebelum dihubungkan ke request sebenarnya, programmer memanfaatkan middleware sebagai sarana untuk menempatkan autentikasi disini.
    Contoh Mekanisme Sederhana Autentikasi Token Expire
    1. Cek apakah parameter key(token akses) ada isinya, jika tidak ada isinya maka berikan respon HTTP Code 401/403 dengan pesan "Dibutuhkan API Key/Token Akses"
    2. Jika ada isinya maka hitung selisih waktu sekarang dengan waktu login yang dimiliki token akses dari database jika selisihnya belum melewati batas waktu maka ambil data tersebut.
    3. Jika data dari proses sebelumnya ada berarti token masih valid sehingga bisa dilanjutkan pada proses yang dituju.
    4. Jika data dari proses sebelumnya tidak ada berarti token sudah invalid sehingga proses tidak bisa dilanjutkan dan harus memberikan respon HTTP Code 401 dengan pesan "Token Akses Tidak Sah"
  3. Contoh Kode dengan PHP
    $key = $request->getQueryParam("key");
    if(!isset($key) || $key == "") {
        return $response->withJson(["status" => "API Key required"], 401);
    } else {
        $sql = "SELECT remember_token, updated_at FROM users WHERE remember_token=:id AND TIMESTAMPDIFF(Minute,updated_at, now()) <=120";
        $stmt = $this->db->prepare($sql);
        $stmt->execute([":id" => $key]);
        if($stmt->rowCount() > 0) { 
             return $response = $next($request, $response);
        }
        return $response->withJson(["status" => "Unauthorized"], 401);
    }

    Letak autentikasi waktu kadaluarsa ada pada bagian :
    TIMESTAMPDIFF(Minute,updated_at, now()) <=120";
      
    Parameter Minute artinya waktu yang dicari selisinya adalah dengan akurasi menit, updated_at adalah waktu saat login dan now() pada query mysql berfungsi untuk mendapatkan waktu sekarang atau saat request dilakukan. Bagian <=120 (2 jam) adalah batas waktu pemakaian token akses atau selisih waktu request dengan waktu login, nilai ini dapat ditambah atau dikurangi sesuai dengan kebutuhan seberapa lama masa aktif token akses yang diperlukan.

KESIMPULAN

Ini hanyalah salah satu contoh cara membuat autentikasi token akses expire, tentunya ada cara lain untuk membuat autentikasi. Jika ada pertanyaan dapat diajukan melalui media sosial penulis yang tertera pada Widget Blog ini.
Saya seorang programmer dengan fokus developer Web dan Android.