Client App Setup
Contoh integrasi SSO di aplikasi Laravel client:
1. Install Socialite
composer require laravel/socialite
2. Konfigurasi Provider
Tambahkan di config/services.php:
'sso' => [
'client_id' => env('SSO_CLIENT_ID'),
'client_secret' => env('SSO_CLIENT_SECRET'),
'redirect' => env('SSO_REDIRECT_URI'),
'host' => env('SSO_HOST', 'http://localhost:8555'),
],
3. Environment Client
SSO_HOST=http://localhost:8555
SSO_CLIENT_ID=your-client-id
SSO_CLIENT_SECRET=your-client-secret
SSO_REDIRECT_URI=http://your-app.test/auth/callback
4. Routes
// routes/web.php
Route::get('/auth/redirect', function () {
return Socialite::driver('sso')->redirect();
});
Route::get('/auth/callback', function () {
$ssoUser = Socialite::driver('sso')->user();
$user = User::updateOrCreate(
['email' => $ssoUser->email],
['name' => $ssoUser->name]
);
Auth::login($user);
return redirect('/dashboard');
});
5. Custom SSO Provider
Buat provider di app/Providers/SsoServiceProvider.php:
use Laravel\Socialite\Two\AbstractProvider;
class SsoProvider extends AbstractProvider
{
protected function getAuthUrl($state)
{
return $this->buildAuthUrlFromBase(
config('services.sso.host') . '/oauth/authorize',
$state
);
}
protected function getTokenUrl()
{
return config('services.sso.host') . '/oauth/token';
}
protected function getUserByToken($token)
{
$response = $this->getHttpClient()->get(
config('services.sso.host') . '/api/user',
['headers' => ['Authorization' => 'Bearer ' . $token]]
);
return json_decode($response->getBody(), true);
}
protected function mapUserToObject(array $user)
{
return (new User)->setRaw($user)->map([
'id' => $user['id'],
'name' => $user['name'],
'email' => $user['email'],
]);
}
}