Laravel Socialite: prihlásenie cez OpenID Connect s PKCE
Prihlásenie cez Dazr Identity: bezplatné OpenID Connect hostované v EÚ, s passkeys, kódmi e-mailom a účtami Google alebo Microsoft pod jedným tlačidlom.
Potrebujete tri hodnoty z vývojárskej konzoly: ID klienta, tajný kľúč klienta (len pri webových serverových aplikáciách) a URI presmerovania, ktoré ste zaregistrovali. Všetko ostatné je v dokumente discovery na adrese https://identity.dazr.eu/.well-known/openid-configuration.
Laravel
Laravel Socialite nemá zabudovaný všeobecný ovládač OpenID Connect, preto pridajte malý vlastný ovládač. Posiela ľudí do Dazr s PKCE a číta používateľa z koncového bodu informácií o používateľovi. Socialite nečíta dokument discovery, preto sú koncové body vypísané. Zaregistrujte webovú serverovú aplikáciu s URI na presmerovanie https://app.example.eu/auth/dazr/callback.
<?php
// app/Socialite/DazrProvider.php
namespace App\Socialite;
use Laravel\Socialite\Two\AbstractProvider;
use Laravel\Socialite\Two\User;
class DazrProvider extends AbstractProvider
{
protected $scopes = ['openid', 'profile', 'email'];
protected $scopeSeparator = ' ';
protected $usesPKCE = true;
protected function getAuthUrl($state)
{
return $this->buildAuthUrlFromBase('https://identity.dazr.eu/oauth/authorize', $state);
}
protected function getTokenUrl()
{
return 'https://identity.dazr.eu/oauth/token';
}
protected function getUserByToken($token)
{
$response = $this->getHttpClient()->get('https://identity.dazr.eu/oauth/userinfo', [
'headers' => ['Authorization' => 'Bearer '.$token],
]);
return json_decode((string) $response->getBody(), true);
}
protected function mapUserToObject(array $user)
{
return (new User)->setRaw($user)->map([
'id' => $user['sub'],
'name' => $user['name'] ?? null,
'email' => $user['email'] ?? null,
]);
}
}
// config/services.php
'dazr' => [
'client_id' => env('DAZR_CLIENT_ID'),
'client_secret' => env('DAZR_CLIENT_SECRET'),
'redirect' => env('DAZR_REDIRECT_URI'),
],
// app/Providers/AppServiceProvider.php, in boot()
use Laravel\Socialite\Facades\Socialite;
use App\Socialite\DazrProvider;
Socialite::extend('dazr', function ($app) {
return Socialite::buildProvider(DazrProvider::class, config('services.dazr'));
});
// routes/web.php
Route::get('/auth/dazr', fn () => Socialite::driver('dazr')->redirect());
Route::get('/auth/dazr/callback', function () {
$dazr = Socialite::driver('dazr')->user();
$user = \App\Models\User::updateOrCreate(
['dazr_sub' => $dazr->getId()],
['name' => $dazr->getName() ?? $dazr->getEmail(), 'email' => $dazr->getEmail()],
);
Auth::login($user);
return redirect('/');
});
sub je párový: rovnaký pre každú aplikáciu vašej organizácie, iný pre každú inú organizáciu. Pre danú osobu sa nikdy nemení, zatiaľ čo e-mailová adresa sa zmeniť môže. Ukladajte sub ako kľúč účtu a email berte ako kontaktný údaj.
Ďalšie informácie pre vývojárov
Dokumentácia pre vývojárovVšetci sprievodcovia integráciouĽubovoľná knižnica OpenID ConnectCeny