Как указать несколько схем выхода по умолчанию? - PullRequest
0 голосов
/ 12 февраля 2020

Я использую WsFed для реализации ADFS SSO в приложении. Чтобы правильно выйти из системы, я должен указать CookieAuthenticationDefaults.AuthenticationScheme и WsFederationDefaults.AuthenticationScheme схемы для метода SignOut. Если я использую только схему cook ie, я не выйду из системы. Если я использую только схему WsFed, я выйду из системы, но смогу автоматически пройти повторную аутентификацию, если нажму кнопку возврата браузера.

В данный момент я указываю их обоих для метода SignOut , Однако я не хочу, чтобы эти схемы были в нескольких местах (Startup.cs и действие контроллера).

Я знаю, что если я не предоставлю схему, то по умолчанию она будет одна, как в моем Login действие. Но возможно ли установить по умолчанию две схемы или нужно жестко закодировать только одну из них в действии?

Действие выхода из системы:

[AllowAnonymous]
[HttpGet]
public IActionResult Logout()
{
    return SignOut(
        new AuthenticationProperties
        {
            RedirectUri = Url.Action("LoggedOutSuccessfully", "NameController"),
        },
        WsFederationDefaults.AuthenticationScheme,
        CookieAuthenticationDefaults.AuthenticationScheme);
}

Настройка схемы запуска по умолчанию: Startup.cs:

services.AddAuthentication(sharedOptions =>
{
    sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;

    //need two schemes here (or somewhere) instead of one
    sharedOptions.DefaultSignOutScheme = WsFederationDefaults.AuthenticationScheme;
})
.AddWsFederation(options =>
{
    //... WsFed options
})
.AddCookie(options =>
{
    //... cookie options
});

1 Ответ

1 голос
/ 12 февраля 2020

Короткий ответ - нет, вы не можете по-настоящему объединить несколько схем по умолчанию.

Причина этого в основном заключается в том, какие схемы могут быть: Схема cook ie действительно одна из самых простых схем Вы можете выйти, потому что ему просто нужно удалить куки пользователя и, следовательно, не нужен собственный HTTP-ответ. Вместо этого его можно объединить с другим ответом, например, с удаленной схемой выхода из удаленного поставщика аутентификации.

WS-Federation - это схема удаленной аутентификации, которая в основном означает, что она опирается на удаленного поставщика аутентификации. на самом деле выполнить аутентификацию пользователя. В большинстве случаев вход в систему с удаленным провайдером аутентификации означает, что этот провайдер также сам создаст сеанс пользователя, чтобы последующие запросы аутентификации могли полагаться на уже существующий сеанс пользователя для аутентификации пользователя без запроса их учетных данных. Это также является основой единого входа в нескольких приложениях: вы входите один раз с поставщиком центральной аутентификации, и все приложения могут прозрачно аутентифицировать пользователя без запроса повторной аутентификации.

Для процесса выхода к сожалению, это означает, что для того, чтобы вывести пользователя из системы удаленно , пользователь должен быть отправлен именно этому провайдеру аутентификации, чтобы выйти из него (просто потому, что вы не можете самостоятельно очистить повар ie провайдера аутентификации). Обычно это делается с помощью перенаправления на страницу выхода провайдера аутентификации. А поскольку перенаправление представляет собой один HTTP-ответ, его можно объединить с выходом cook ie, но не с другим удаленным выходом из системы аутентификации.

В зависимости от протокола и возможностей провайдера, протокол может позволить вам указать обратный URL-адрес, на который пользователь перенаправляется обратно после успешного выхода. Этот механизм может использоваться для цепочки выходов с несколькими обработчиками аутентификации, каждый из которых требует своего собственного ответа HTTP. Но вам придется справиться с этим самостоятельно.

В конце концов, это также действительно ваш выбор, хотите ли вы выйти из системы удаленно. В зависимости от ваших настроек, вы можете захотеть выйти из системы только локально (через схему cook ie), но оставить их в системе с помощью обработчика удаленной аутентификации. Таким образом, выбирая схемы выхода, вы также можете контролировать это.

...