Integrasi dengan Laravel
Untuk aplikasi berbasis Laravel, Anda dapat menggunakan paket Laravel Socialite atau sdk bawaan dari logto logto/sdk di https://github.com/logto-io/php. Ini adalah standar industri untuk otentikasi OAuth/OIDC di ekosistem Laravel.
1. Instalasi Paket
Jalankan perintah berikut di terminal proyek Laravel Anda:
composer require composer require logto/sdk
2. Konfigurasi Service
Tambahkan konfigurasi Logto ke dalam file app/Services/LogtoService.php dan file config config/logto.php.
// app/Services/LogtoService.php
namespace App\Services;
use Logto\Sdk\LogtoConfig;
use Logto\Sdk\LogtoClient as Logto;
class LogtoService
{
protected Logto $logto;
public function __construct()
{
$config = new LogtoConfig(
config('logto.endpoint'),
config('logto.app_id'),
config('logto.app_secret'),
config('logto.scopes')
// config('logto.redirect_uri')
);
$this->logto = new Logto($config);
}
public function loginUrl(): string
{
return $this->logto->buildAuthorizationUrl();
}
public function handleCallback(string $code): void
{
$this->logto->handleRedirectCallback($code);
}
public function getUser()
{
return $this->logto->getUserInfo();
}
}
// config/logto.php
return [
'endpoint' => env('LOGTO_ENDPOINT', 'https://dev-sso.denpasarkota.go.id'),
'app_id' => env('LOGTO_APP_ID'),
'app_secret' => env('LOGTO_APP_SECRET'),
'redirect_uri' => env('LOGTO_REDIRECT_URI', 'http://localhost:8000/callback'),
'scopes' => ['all', 'openid', 'profile', 'email'],
];
3. Setup Controller
Ini konfigurasi di controller, untuk contoh bisa menggunakan konfigurasi ini dan disesuaikan sesuai kebutuhan. Jangan lupa untuk konfigurasi routingnya juga.
// app/Http/Controllers/Auth/SSOController.php
namespace App\Http\Controllers\Auth;
use Illuminate\Support\Facades\Session;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Services\LogtoService;
class SSOController extends Controller
{
protected LogtoService $logto;
public function __construct()
{
$this->logto = new LogtoService();
}
public function login()
{
return redirect($this->logto->loginUrl());
}
public function callback(Request $request)
{
$code = $request->get('code');
$this->logto->handleCallback($code);
$userInfo = $this->logto->getUser();
// Simpan ke DB atau login ke sistem Laravel
$user = User::firstOrCreate(
['email' => $userInfo['email']],
['name' => $userInfo['name']]
);
Auth::login($user);
return redirect('/dashboard');
}
info
Catatan Jika Anda menggunakan Laravel 11, Anda bisa menambahkan provider ini langsung di file bootstrap/providers.php atau AppServiceProvider sesuai struktur baru Laravel 11.