Получить текущую схему аутентификации в ASP.NET core 2 - PullRequest
0 голосов
/ 22 февраля 2019

В настоящее время я борюсь с приложением Asp.net core 2, которое использует два провайдера openid для аутентификации, сопоставленных с двумя разными схемами аутентификации (с разными именами).

Проблема, с которой я сталкиваюсь, - попытка выхода из системы.конкретной схемы, которая в настоящее время используется.Например, если я поддерживаю аутентификацию Google и Facebook, мне нужно понять, какая схема используется в настоящее время, и вызвать метод SignOut, указывающий правильную схему.Это позволяет мне очищать локальные куки-файлы, а также перенаправлять пользователя к внешнему провайдеру идентификации и выходу из системы.

Дело в том, что мне не удается найти функцию GetCurrentScheme(), чтобы я мог использовать ее длязатем укажите схему в методе SignOut.Я уверен, что мне не хватает чего-то простого ...

1 Ответ

0 голосов
/ 17 июня 2019

У меня похожая проблема, когда мне нужно было использовать разные типы аутентификации - JWT и Cookies.Вы можете получить текущую схему, используя IAuthenticationSchemeProvider , а также другие сведения об аутентификации.

private readonly IAuthenticationSchemeProvider _authenticationSchemeProvider;

public AuthController(IAuthenticationSchemeProvider authenticationSchemeProvider)
{
    _authenticationSchemeProvider = authenticationSchemeProvider;
}

-

public async Task<bool> Logout()
{
    // Default AuthenticationScheme
    AuthenticationScheme defaultScheme = await _authenticationSchemeProvider.GetDefaultAuthenticateSchemeAsync();
    // The scheme that will be used by default
    AuthenticationScheme defaultSignoutScheme= await _authenticationSchemeProvider.GetDefaultSignOutSchemeAsync();
    // Returns all schemes currently registered 
    IEnumerable<AuthenticationScheme> listAuthenticationSchemeProvider = await _authenticationSchemeProvider.GetAllSchemesAsync();

    await HttpContext.SignOutAsync(defaultScheme.Name);

    return true;
}

Документы

...