Cook ie .ExpireTimeSpan игнорируется и устанавливается в Session в CookieAuthentication - PullRequest
0 голосов
/ 28 мая 2020

У меня возникла проблема при попытке установить время expire для повара ie в моем CookieAuthentication, кажется, что ExpireTimeSpan просто игнорируется, и когда я получаю повара ie в браузере установлено время истечения срока действия Session ..

Я использую c# 8.0 с /. NET Core 3.1, а вот мой ConfigureService код:

    public void ConfigureServices(IServiceCollection services)
    {

        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(options => {
            options.Cookie.Name = "authToken";
            options.ExpireTimeSpan = TimeSpan.FromMinutes(120);
            options.Events = new CookieAuthenticationEvents()
            {
                OnRedirectToLogin = (context) =>
                {
                    context.HttpContext.Response.Redirect("https://example.com/test/expired.html");
                    return Task.CompletedTask;
                }
            };
        });
        services.AddControllers();
    }

Но вот как я его получаю

enter image description here

Ответы [ 2 ]

1 голос
/ 28 мая 2020

options.ExpireTimeSpan = TimeSpan.FromMinutes(120); указывает, как долго действителен сам билет проверки подлинности.

Управляет, сколько времени билет проверки подлинности, хранящийся в файле cookie, будет оставаться действительным с момента его создания. Информация об истечении срока хранения сохраняется в защищенный повар ie билет. Из-за этого просроченный Cook ie будет проигнорирован, даже если он будет передан на сервер после того, как браузер должен был очистить его.

Это отдельно от значения, которое указывает, как долго браузер будет хранить the cook ie.

Docs

Вы хотите контролировать срок действия cook ie с помощью свойства Expiration свойства Cookie.

public void ConfigureServices(IServiceCollection services)
{

    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options => {
        options.Cookie.Name = "authToken";
        /// control cookie expiration
        options.Cookie.Expiration = TimeSpan.FromMinutes(120);
        options.ExpireTimeSpan = TimeSpan.FromMinutes(120);
        options.Events = new CookieAuthenticationEvents()
        {
            OnRedirectToLogin = (context) =>
            {
                context.HttpContext.Response.Redirect("https://example.com/test/expired.html");
                return Task.CompletedTask;
            }
        };
    });
    services.AddControllers();
}

Вы также можете установить свойство MaxAge.

0 голосов
/ 28 мая 2020

У меня есть приложение в. net core 3.1 мои ConfigureServices выглядят так:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
    //options.Cookie = new CookieBuilder() { Name = "EcomAuth" };
    options.LoginPath = "/Account/Login/";
    options.AccessDeniedPath = "/Account/AccessDenied";
    options.LogoutPath = "/Account/Logout";
    options.ExpireTimeSpan = TimeSpan.FromMinutes(120);
});

для какой-то ошибки, когда я устанавливаю имя повара ie, код перестает работать, поэтому эта строка закомментирован. Это мое действие для входа в систему

List<Claim> claims = new List<Claim>
{
    new Claim(ClaimTypes.Name, user.Name, ClaimValueTypes.String),
    new Claim(ClaimTypes.Role, userType.Name, ClaimValueTypes.String),
    new Claim("Idusuario",user.IdUser.ToString(), ClaimValueTypes.String),
};

ClaimsIdentity identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);

var authProperties = new AuthenticationProperties
{
    AllowRefresh = true,
    ExpiresUtc = DateTime.UtcNow.AddMinutes(120),
    IsPersistent = true,
    RedirectUri = "https://localhost:44318/Account/Logout"
};

await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity), authProperties);

для меня все работает нормально.

...