Выход из системы Identity по истечении срока действия cook ie вызывает ошибку http 400 - PullRequest
1 голос
/ 06 мая 2020

В моем _LoginPartial.cshtml у меня есть эта кнопка выхода:

<form id="logoutForm" class="form-inline" asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Action("Index", "", new { area = "" })">
    <button id="logout" type="submit">
        Log out
    </button>
</form>

Затем, из того, что я могу собрать, вызывается Logout.cshtml.cs:

public class LogoutModel : PageModel
{
    private readonly SignInManager<ApplicationUser> _signInManager;
    private readonly ILogger<LogoutModel> _logger;

    public LogoutModel(SignInManager<ApplicationUser> signInManager, ILogger<LogoutModel> logger)
    {
        _signInManager = signInManager;
        _logger = logger;
    }

    public void OnGet()
    {
    }

    public async Task<IActionResult> OnPost(string returnUrl = null)
    {
        await _signInManager.SignOutAsync();
        _logger.LogInformation("User logged out.");
        if (returnUrl != null)
        {
            return LocalRedirect(returnUrl);
        }
        else
        {
            return RedirectToPage();
        }
    }
}

Но если Пользовательский сеанс Cook ie истек, когда пользователь нажимает «Выйти», я получаю это описательное сообщение об ошибке:

HTTP ERROR 400

Любые точки останова, установленные в любом месте Logout.cshtml.cs никогда не попадает.

Что происходит?

1 Ответ

2 голосов
/ 07 мая 2020

если время сеанса пользователя ie истекло, когда пользователь нажимает «Выход», я получаю это описательное сообщение об ошибке:

HTTP ERROR 400

Любые установленные точки останова в любом месте Logout.cs html .cs никогда не попадает.

Как мы знаем, страницы Razor автоматически защищены от XSRF / CSRF. И токен защиты от подделки (связанный с идентификатором текущего пользователя), который пользователь-клиент отправил на сервер, приведет к сбою проверки, если срок аутентификации текущего пользователя истек, что вызывает указанную выше ошибку.

Чтобы исправить указанную выше ошибку, вы можете применить IgnoreAntiforgeryToken Атрибут класса LogoutModel, как показано ниже.

[AllowAnonymous]
[IgnoreAntiforgeryToken]
public class LogoutModel : PageModel
{ 

Подробную информацию об атаках «Предотвращение подделки межсайтовых запросов (XSRF / CSRF)» можно получить, выполнив следующие действия: c:

https://docs.microsoft.com/en-us/aspnet/core/security/anti-request-forgery?view=aspnetcore-3.1

...