Pluginify

Masuk Daftar
Home > Blog > Laravel > Menerapkan API Token Sanctum di Laravel untuk Autentikasi REST API

Menerapkan API Token Sanctum di Laravel untuk Autentikasi REST API

Menerapkan API Token Sanctum di Laravel untuk Autentikasi REST API

Dalam pengembangan REST API, autentikasi adalah komponen penting untuk memastikan hanya klien yang valid dapat mengakses endpoint tertentu. Laravel menyediakan beberapa mekanisme autentikasi API, salah satunya yang paling populer dan ringan adalah Laravel Sanctum.

Sanctum dirancang untuk mengelola token API personal, login SPA (Single Page Application), serta autentikasi mobile. Fleksibilitas dan kemudahan implementasinya menjadikan Sanctum pilihan favorit bagi backend modern yang membutuhkan sistem token tanpa kompleksitas OAuth.

Apa Itu Laravel Sanctum

Laravel Sanctum adalah paket resmi yang menyediakan sistem API Token berbasis Bearer Token. Sanctum mendukung tiga skenario utama:

  1. API Tokens untuk mobile/IoT/client eksternal
  2. SPA Authentication menggunakan cookie + session
  3. Personal Access Tokens untuk fitur user token (mirip GitHub token)

Dalam konteks REST API, kita fokus pada skenario API Tokens, yang memanfaatkan token unik per pengguna.

Instalasi Laravel Sanctum

Untuk menggunakan Sanctum, jalankan perintah berikut pada project Laravel Anda:

composer require laravel/sanctum

Lalu publish konfigurasi:

php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"

Command tersebut akan menambahkan migrasi untuk tabel token.

Jalankan migrasi:

php artisan migrate

Pada langkah ini, tabel berikut akan dibuat:

personal_access_tokens

Tabel ini menyimpan token untuk setiap pengguna.

Konfigurasi Model User

Untuk menghasilkan token, model User harus menggunakan trait HasApiTokens.

Edit file:

app/Models/User.php

Tambahkan:

use LaravelSanctumHasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
}

Trait tersebut menyediakan method createToken() dan handler token lainnya.

Membuat Endpoint Login untuk Token

Pada API yang membutuhkan autentikasi token, diperlukan endpoint untuk menghasilkan token setelah login berhasil.

Contoh Controller:

public function login(Request $request)
{
    $request->validate([
        'email' => 'required|email',
        'password' => 'required'
    ]);

    $user = AppModelsUser::where('email', $request->email)->first();

    if (!$user || !Hash::check($request->password, $user->password)) {
        return response()->json(['message' => 'Credentials invalid'], 401);
    }

    $token = $user->createToken('api-token')->plainTextToken;

    return response()->json([
        'message' => 'Login successful',
        'token' => $token
    ], 200);
}

Response JSON akan berisi token rahasia yang harus disimpan oleh client.

Mengirim Token pada Request

Client harus mengirim header Bearer Token:

Authorization: Bearer <token_yang_didapat>

Contoh request cURL:

curl -H "Authorization: Bearer eyJhbGci..."      https://domain.com/api/user

Token kini menjadi identitas autentik pada setiap request.

Proteksi Route Menggunakan Middleware Sanctum

Untuk melindungi endpoint API, gunakan middleware auth:sanctum.

Contoh di file routes/api.php:

Route::middleware('auth:sanctum')->group(function () {
    Route::get('/profile', function (Request $request) {
        return $request->user();
    });
});

Endpoint profile kini hanya dapat diakses jika token valid.

Logout dan Menghapus Token

Untuk logout API Token, kita cukup menghapus token milik user.

Contoh method logout:

public function logout(Request $request)
{
    $request->user()->currentAccessToken()->delete();

    return response()->json([
        'message' => 'Logged out'
    ]);
}

Jika ingin menghapus semua token user:

$request->user()->tokens()->delete();

Hal ini sesuai untuk fungsi logout from all devices.

Membuat Token dengan Kemampuan (Abilities)

Sanctum mendukung konsep abilities (mirip dengan scope OAuth).

Contoh membuat token dengan akses terbatas:

$token = $user->createToken('admin-token', ['create', 'update'])->plainTextToken;

Memeriksa abilities di Controller:

if ($request->user()->tokenCan('update')) {
    // allowed to update
}

Dengan abilities, API dapat menerapkan aturan granular pada level token.

Keamanan dalam Sanctum

Sanctum dianggap aman untuk API karena:

  • Token di-hash dalam database (seperti password)
  • Mendukung token satu pengguna multi-device
  • Token dapat dicabut kapan saja
  • Mendukung pembatasan abilities
  • Tidak menggunakan session (stateless) dalam mode token

Pastikan client menyimpan token secara aman, misalnya:

  • Mobile → Secure Storage
  • Web → Local Storage/Cookie HTTP Only

Kesimpulan

Laravel Sanctum memberikan solusi autentikasi API token yang efisien, ringan, dan mudah diterapkan pada REST API modern. Dengan dukungan instalasi sederhana, middleware bawaan, dan fitur kemampuan token, Sanctum mampu melayani penggunaan dari aplikasi SPA, mobile, hingga IoT.

Dibanding sistem OAuth seperti Passport, Sanctum jauh lebih mudah diterapkan untuk proyek yang tidak memerlukan otorisasi tingkat tinggi. Dengan memadukan token, abilities, dan proteksi route, Sanctum dapat menjadi basis keamanan API yang terstruktur.

Baca Juga: Memahami Event Listener Laravel untuk Arsitektur Aplikasi yang Terstruktur

Pluginify
Pluginify