Подтвердить что ты не робот

Как работает IsPersistent в аутентификации OWIN Cookie

Кажется, я не понимаю, как работает IsPersistent в аутентификации cookie OWIN, код ниже - использовать IsPersistent:

var context = Request.GetOwinContext();
var authManager = context.Authentication;
var properties = new AuthenticationProperties { IsPersistent = isPersistence };

authManager.SignIn(properties, identity);

Я не вижу разницы, когда пользователь проверяет/отменяет Remember me (использует IsPersistent позади), потому что, если я закрою браузер Chrome и снова открою его, чтобы перейти с веб-сайта, файл cookie .AspNet.ApplicationCookie все еще существует и это позволяет мне даже проверить или снять отметку Remember me.

Я проверил определение IsPersistent на ссылке :

Получает или задает, сохраняется ли сеанс аутентификации по нескольким запросам.

Но не поймите много понимания, поскольку я вижу, что он все еще работает.

Код для настройки аутентификации cookie OWIN:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationMode = AuthenticationMode.Active,
    AuthenticationType = ApplicationTypes.ApplicationCookie,
    ExpireTimeSpan = TimeSpan.FromMinutes(30),
    LoginPath = new PathString("/Account/LogOn")
});
4b9b3361

Ответ 1

Постоянные файлы cookie будут сохраняться как файлы в папках браузера, пока они не истекут или не удалят вручную. Это приведет к сохранению файла cookie, даже если вы закроете браузер.

Если для параметра IsPersistent установлено значение false, браузер получит куки файл сеанса, который очищается при закрытии браузера.

Теперь причина, по которой cookie сеанса не очищается после перезапуска браузера, обусловлена ​​настройками по умолчанию для Chrome. Чтобы исправить это, перейдите к настройкам Chrome → advanced и снимите флажок Продолжить запуск фоновых приложений, когда Google Chrome закрыт в разделе "Система".

Ответ 2

public void Configuration(IAppBuilder app)
{
    //Some Code
    app.UseCookieAuthentication(GetCookieAuthenticationOptions());
    //Some Code
}

private static CookieAuthenticationOptions GetCookieAuthenticationOptions()
{
    var options  = new CookieAuthenticationOptions();
    {
        CookieName = "AuthCookie",  //Some cookie settings here
    };
    var provider = (CookieAuthenticationProvider)options.Provider;
    provider.OnResponseSignIn = (context) => 
    {
        context.Properties.IsPersistent = true;
        context.Properties.ExpiresUtc = DateTimeOffset.UtcNow.AddHours(24);
    };
    return options;
}

Ответ 3

Постоянные куки для .Net Core 2.2 вы можете попробовать это

Пример

var claimsIdentity = new ClaimsIdentity(new[]
 { new Claim(ClaimTypes.Name, "test"),},CookieAuthenticationDefaults.AuthenticationScheme);

HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), new AuthenticationProperties
{
  IsPersistent = true,
  ExpiresUtc = DateTime.UtcNow.AddMinutes(30)
});