Laravel SSO ServerPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Laravel SSO Server

Сообщение Anonymous »

Я настроил сервер SSO, используя паспорт Laravel для аутентификации и авторизации внешних приложений, и у меня возникли трудности с процедурой входа в систему. Laravel 11 и Laravel Passport 12. Пользователь нажимает кнопку «Вход» в магазине, перенаправляется на форму входа на сервер SSO и перенаправляется обратно на веб -магазин после успешного входа в систему. Когда пользователь выйдет в систему, веб -магазин правильно выпускает пользовательский сеанс на стороне магазина, и, кроме того, я отозвал токены доступа и обновления, выпущенные во время входа в систему. Однако, когда пользователь снова нажимает в систему, немедленно после входа в систему, SSO Server автоматически входит в систему, вписывая пользователя, не запрашивая учетные данные. Есть ли способ предотвратить это? Должен ли я принять другой подход к процедуре входа/входа в систему или я неправильно понял этот процесс? Я проверил это, установив срок действия файла cookie с сеансом, когда браузер закрыт. Сделав это, после закрытия браузера и немедленно вновь открыв его, мне снова побуждают к учетным данным пользователя. Когда этот файл cookie не срок действия истекает, SSO -сервер автоматически регистрирует меня даже после закрытия браузера. Что, в свою очередь, нужно закончить, когда пользователь выходит из входа в магазин.

Код: Выделить всё

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>
Эта функция доступна по маршруту, зарегистрированному в web.php: < /p>
Route::get('/sso/logout', [LoginController::class, 'sso_logout'])->name('sso.logout');
< /code>
Работает отзыв к токену доступа и обновления, я вижу, что правильные токены отозваны в базе данных. Но манипуляция с сеансом, похоже, не работает.
Я также пытался явно заявить о защите: < /p>
Auth::guard('web')->logout();
и промывание сеанса/Забыть cookie:

Код: Выделить всё

Session::flush();
Cookie::queue(Cookie::forget('laravel_token'));
Cookie::queue(Cookie::forget('pegasus_api_session'));
Любой совет приветствуются о том, как решить это.

Подробнее здесь: https://stackoverflow.com/questions/796 ... ver-logout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»