Laravel SSO Server AbmeldenPhp

PHP-Programmierer chatten hier
Anonymous
 Laravel SSO Server Abmelden

Post by Anonymous »

Ich habe einen SSO -Server mit Laravel Passport eingerichtet, um externe Apps zu authentifizieren und zu autorisieren, und ich habe Schwierigkeiten mit dem Abmeldungsprozedur. Laravel 11 und Laravel Passport 12. < /p>
Ein Webshop verwendet den SSO -Server, um Benutzer anzumelden. Dies scheint einwandfrei zu funktionieren. Der Benutzer klickt auf die Anmeldeschaltfläche im Shop, wird auf dem SSO -Server in das Anmeldeformular umgeleitet und nach erfolgreichem Login zurück zum Webshop umgeleitet. Wenn sich der Benutzer anmeldet, meldet sich der WebShop die Benutzersitzung auf der Shop -Seite korrekt an und revoke zusätzlich die während des Anmeldung ausgegebenen Zugriffs- und Aktualisierungstoken. Wenn der Benutzer jedoch unmittelbar nach dem Abmelden auf Anmeldung klickt, protokolliert der SSO -Server den Benutzer automatisch zurück, ohne nach Anmeldeinformationen zu fragen. Gibt es eine Möglichkeit, dies zu verhindern? Sollte ich einen anderen Ansatz für das Anmeldung/Abmeldeverfahren verfolgen oder diesen Prozess falsch verstehe? Ich habe dies getestet, indem ich das Sitzungs -Cookie so eingestellt habe, dass der Browser geschlossen ist. Nachdem ich dies getan habe, nachdem ich den Browser geschlossen und sofort wieder geöffnet habe, werde ich erneut für Benutzeranmeldeinformationen aufgefordert. Wenn dieses Cookie nicht auf Ablauf gesetzt ist, protokolliert mich der SSO -Server auch nach dem Schließen des Browsers automatisch. Was wiederum beendet werden muss, wenn sich der Benutzer im Shop anmeldet.

Code: Select all

public function sso_logout(Request $request)
{
//Capture the redirect_uri from the session if available
$redirectUri = session('redirect_uri', "https://default.com");

//Revoke access and refresh tokens
$user = $request->user('api');
if ($user) {
$token = $user->token();
$tokenRepository = app(TokenRepository::class);
$refreshTokenRepository = app(RefreshTokenRepository::class);

// Revoke an access token...
$tokenRepository->revokeAccessToken($token->id);

// Revoke all of the token's refresh tokens...
$refreshTokenRepository->revokeRefreshTokensByAccessTokenId($token->id);
}

//Signout the user
$this->guard()->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();

if ($response = $this->loggedOut($request)) {
return $response;
}

if ($redirectUri != "https://default.com") {
//get domain from redirect_uri
$redirectUri = parse_url($redirectUri, PHP_URL_SCHEME) . '://' . parse_url($redirectUri, PHP_URL_HOST) ;
}

return $request->wantsJson()
? new JsonResponse([], 204)
: redirect($redirectUri);
}
< /code>
Diese Funktion ist über eine Route in web.php: < /p>
erreichbarRoute::get('/sso/logout', [LoginController::class, 'sso_logout'])->name('sso.logout');
< /code>
Der Widerruf der Zugriffs- und Aktualisierungsteuerung kann sehen, wie die richtigen Token in der Datenbank widerrufen werden. Aber die Sitzungsmanipulation scheint nicht zu funktionieren.Auth::guard('web')->logout();
und spülen Sie die Sitzung/Vergessen des Cookies:

Code: Select all

Session::flush();
Cookie::queue(Cookie::forget('laravel_token'));
Cookie::queue(Cookie::forget('pegasus_api_session'));
Jeder Rat wäre willkommen, wie man dies löst.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post