antmedia/sikaku-auth-laravel

SiKaKu Auth integration with PKCE (S256) for Laravel โ€” secure, service-driven package

Maintainers

Package info

scbase.antmedia.co.id/maul33/sikaku-oauth-laravel

pkg:composer/antmedia/sikaku-auth-laravel

Transparency log

Statistics

Installs: 15

Dependents: 0

Suggesters: 0

1.0.4 2026-05-22 04:20 UTC

This package is not auto-updated.

Last update: 2026-07-17 04:56:06 UTC


README

Latest Version on Packagist Total Downloads Software License

Integrasi OAuth 2.1 + PKCE (S256) resmi untuk framework Laravel. Paket ini dirancang secara modular menggunakan Service-driven Architecture dengan keamanan kelas atas, timing-safe CSRF state protection, HTTPS-only constraints, dan penyegaran token otomatis (auto-refresh).

๐Ÿš€ Fitur Utama

  • OAuth 2.1 + PKCE (S256): Implementasi penuh verifier & challenge hash standar RFC 7636.
  • Timing-Safe CSRF state Protection: Mencegah Timing Attack pada state validation menggunakan hash_equals.
  • Laravel Auto-Discovery: Langsung aktif saat diinstal tanpa perlu registrasi manual ServiceProvider atau Facade.
  • EnsureSikakuAuthenticated Middleware: Proteksi rute otomatis, pengalihan guest ke otorisasi server, validasi token, dan auto-refresh token yang akan segera kadaluwarsa secara mulus.
  • Dynamic User-Agent: Memberikan User-Agent dinamis terstandarisasi untuk pemantauan API: sikaku-auth-laravel/1.0.0 (PHP {php_version}; Laravel {laravel_version}; OS {os_name})
  • Mock CLI Test Script: Skrip uji mandiri instan yang mem-mock dependensi Laravel sehingga dapat dieksekusi via CLI tanpa boot framework.

๐Ÿ“ฆ Instalasi

Tambahkan paket ini ke aplikasi Laravel Anda melalui Composer:

composer require antmedia/sikaku-auth-laravel

๐Ÿ”ง Konfigurasi

Publish file konfigurasi ke direktori config aplikasi Anda:

php artisan vendor:publish --provider="Antmedia\SikakuAuth\SikakuAuthServiceProvider" --tag="sikaku-auth-config"

Konfigurasikan variabel lingkungan berikut di file .env Anda:

SIKAKU_CLIENT_ID="[CLIENT ID ANDA]"
SIKAKU_CLIENT_SECRET="[CLIENT SECRET ANDA]"
SIKAKU_REDIRECT_URI="https://aplikasi-anda.dev/oauth/callback"
SIKAKU_API_URL="https://api-sikaku.dev"

๐Ÿ’ก Cara Penggunaan

1. Inisiasi Login & Callback (Controller)

Gunakan SikakuAuth Facade di dalam Controller Anda untuk mengalihkan pengguna dan menangani token exchange:

namespace App\Http\Controllers;

use Antmedia\SikakuAuth\Facades\SikakuAuth;
use Antmedia\SikakuAuth\Exceptions\SikakuAuthException;
use Illuminate\Http\Request;

class AuthController extends Controller
{
    // Arahkan user ke login server SiKaKu
    public function login()
    {
        return redirect(SikakuAuth::getAuthorizeUrl());
    }

    // Tangani callback code exchange
    public function callback(Request $request)
    {
        $code = $request->query('code');
        $state = $request->query('state');

        try {
            $tokenData = SikakuAuth::exchangeCode($code, $state);
            SikakuAuth::saveToken($tokenData);

            return redirect('/dashboard');
        } catch (SikakuAuthException $e) {
            return redirect('/login')->withErrors($e->getMessage());
        }
    }
}

2. Melindungi Route (Middleware)

Daftarkan middleware sikaku.auth untuk memproteksi halaman internal. Middleware ini secara otomatis menangani sesi, validasi kedaluwarsa, dan melakukan auto-refresh token sebelum kedaluwarsa:

Route::middleware(['sikaku.auth'])->group(function () {
    Route::get('/dashboard', [DashboardController::class, 'index']);
});

3. Mengakses Token Aktif di Controller

Setelah melewati middleware sikaku.auth, data token yang valid dapat diakses langsung dari request attributes:

public function index(Request $request)
{
    $tokenData = $request->attributes->get('oauth_token');
    $accessToken = $tokenData['access_token'];

    // Panggil API resource Anda dengan $accessToken...
}

4. Mengambil Informasi Profil Pengguna (UserInfo)

Setelah mendapatkan token yang valid, Anda dapat memanggil method getUserInfo untuk mengambil profil pengguna langsung dari server OAuth SiKaKu:

use Antmedia\SikakuAuth\Facades\SikakuAuth;
use Antmedia\SikakuAuth\Exceptions\SikakuAuthException;

public function profile(Request $request)
{
    $tokenData = $request->attributes->get('oauth_token');
    
    try {
        $userInfo = SikakuAuth::getUserInfo($tokenData['access_token']);
        
        // Contoh data respon: ['id' => 123, 'name' => 'John Doe', 'email' => 'john@example.com']
        return view('profile', compact('userInfo'));
    } catch (SikakuAuthException $e) {
        return back()->withErrors('Gagal mengambil profil: ' . $e->getMessage());
    }
}

๐Ÿงช Pengujian CLI Mandiri

Kami menyediakan file uji mandiri sederhana di dalam folder examples/ untuk menguji fungsionalitas paket ini tanpa membutuhkan boot framework Laravel secara penuh. Jalankan perintah berikut di terminal:

php examples/cli-test.php

๐Ÿ“„ Lisensi

Paket ini dirilis di bawah Lisensi MIT.