Что делает свойство CookieAuthenticationOptions.LogoutPath в ASP.NET Core 2.1? - PullRequest
0 голосов
/ 08 октября 2018

В ASP.NET Core 2.1 кто-нибудь может объяснить, что делает CookieAuthenticationOptions.LogoutPath документации указано:

Если LogoutPath предоставлен обработчиком, то запрос на этот путь будет перенаправлен на основе ReturnUrlParameter.

Но я даже не думаю, что это предложение имеет правильную грамматику, поэтому меня смущает значение.

В Startup.cs, у меня оно установлено так:

// Added after AddMvc()
services.ConfigureApplicationCookie(options =>
{
    options.LogoutPath = $"/account/logout";
});
  1. Когда это будет вызвано?

  2. Нужно ли создать соответствующее действие GET в моем AccountController и Просмотр для этого?Или POST действие будет работать?Например:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Logout()
    {
        await _signInManager.SignOutAsync();
        return RedirectToAction("Index", "Home");
    }
    
  3. Требуется ли в моем действии «Выход из системы» выход пользователя из системы или он уже был завершен к этому моменту?

1 Ответ

0 голосов
/ 08 октября 2018

LogoutPath, который вы можете настроить с помощью схемы аутентификации cookie, является нечетным.В то время как LoginPath имеет прямое влияние и в основном является URL-адресом, на который перенаправляется конечный пользователь при вызове проверки подлинности cookie, LogoutPath не используется напрямую.

Вместо этого настроенный LogoutPath используется только для проверки текущего URL-адреса, когда происходит выход из системы со схемой проверки подлинности cookie.Проверка выглядит следующим образом :

// Only redirect on the logout path
var shouldRedirect = Options.LogoutPath.HasValue && OriginalPath == Options.LogoutPath;
await ApplyHeaders(shouldRedirect, context.Properties);

Таким образом, это в основном проверяет, равен ли OriginalPath, который является текущим путем запроса, настроенному пути выхода из системы.В этом случае вызов ApplyHeaders выполнит перенаправление на RedirectUri свойств аутентификации.

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

Та же логика существует и для LoginPath, кстати.но есть дополнительная логика, что схема проверки подлинности cookie также перенаправляет на этот URL при вызове схемы (например, когда требуется проверка подлинности через фильтр авторизации).

DoМне нужно создать соответствующее действие GET в моем AccountController и View для этого?Или будет работать действие POST?

Это зависит от вас и от того, как вы хотите справиться с выходом из системы.Для запуска вышеуказанной логики вам просто нужно любое действие на этом маршруте, поэтому вы также можете выполнить POST, чтобы потребовать от пользователей выполнения отправки формы для их выхода (чтобы предотвратить случайный выход черезGET запросы).

Требуется ли в моем действии Выход из системы пользователя выйти из системы или он уже был завершен к этому моменту?

Вам нужно будет позвонитьSignOutAsync самостоятельно, поскольку не существует неявной обработки этих маршрутов.Точно так же, как вам нужно реализовать свою собственную логику входа в систему на LoginPath, вам также необходимо реализовать логику выхода из системы.

Сконфигурированные пути действительно предназначены для схемы cookie, чтобы знать где эти маршруты есть, но они не влияют на их поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...