antmedia / sikaku-auth-laravel
SiKaKu Auth integration with PKCE (S256) for Laravel โ secure, service-driven package
Package info
scbase.antmedia.co.id/maul33/sikaku-oauth-laravel
pkg:composer/antmedia/sikaku-auth-laravel
Requires
- php: ^8.0
- illuminate/http: ^8.0|^9.0|^10.0|^11.0|^12.0|^13.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0|^12.0|^13.0
Requires (Dev)
- orchestra/testbench: ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- phpunit/phpunit: ^9.5|^10.0|^11.0
README
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.