2016-05-20 4 views
0

UPDATE:ASP.NET ядра 1,0 - MVC 6 - Cookie Истечение

Это, безусловно, не является ошибкой в ​​RC1. Настройки cookie работают с UserManager по умолчанию и UserStore, поэтому он должен быть чем-то связанным с моим UserManager/UserStore, который я контролировал. Я в основном использовать реализацию здесь: https://github.com/jesblit/ASPNET5-FormAuthenticationLDAP

Оригинал сообщения:

У меня есть проблема с постоянными логинов. Независимо от того, как я настрою файл cookie, через 30 минут Пользователь автоматически выйдет из системы (независимо от того, насколько пользователь взаимодействует с приложением).

установка I мой App с:

public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddCaching(); 
     services.AddSession(options => { 
      options.IdleTimeout = TimeSpan.FromDays(1); 
      options.CookieName = ".MySessionCookieName"; 
     }); 

     services.AddEntityFramework() 
      .AddNpgsql() 
      .AddDbContext<Model1>(options => 
       options.UseNpgsql(Configuration["Data:DefaultConnection:ConnectionString"])); 

     services.AddIdentity<MinervaUser, MinervaRole>(options => { 
      options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(1); 
      options.Cookies.ApplicationCookie.SlidingExpiration = true; 
      options.Cookies.ApplicationCookie.AutomaticAuthenticate = true; 

     }) 
      .AddUserStore<MinervaUserStore<MinervaUser>>() 
      .AddRoleStore<MinervaRoleStore<MinervaRole>>() 
      .AddUserManager<MinervaUserManager>(); 

     services.AddMvc(); 
    } 

И:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
     loggerFactory.AddDebug(); 

     if (env.IsDevelopment()) 
     { 
      app.UseBrowserLink(); 
      app.UseDeveloperExceptionPage(); 
      app.UseDatabaseErrorPage(); 
     } 
     else 
     { 
      app.UseExceptionHandler("/Home/Error"); 

      try 
      { 
       using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>() 
        .CreateScope()) 
       { 

       } 
      } 
      catch { } 
     } 
     app.UseIISPlatformHandler(options => { options.AuthenticationDescriptions.Clear(); options.AutomaticAuthentication = true; }); 
     app.UseSession(); 
     app.UseIdentity(); 
     app.UseStaticFiles(); 

     app.UseMvc(routes => 
     { 
      routes.MapRoute(
       name: "default", 
       template: "{controller=Home}/{action=Index}/{id?}"); 
     }); 
    } 

Войти Действие:

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) 
    { 
     ViewData["ReturnUrl"] = returnUrl; 
     if (ModelState.IsValid) 
     { 
      var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false); 
      if (result.Succeeded) 
      { 

       _logger.LogInformation(1, "User logged in."); 
       return RedirectToLocal(returnUrl); 
      } 
... 

Я использую по умолчанию SignInManager. Как сказано, тайм-ауты истечения срока действия, которые я установил в Startup.Configure и Startup.ConfigureServices, не имеют никакого эффекта. Войти -> 30 мин -> автоматического выход :(

Что делать, чтобы продлить этот период времени

(кстати: настраиваемый пользователь, UserManager, UserStore не мешает Teh Cookie в любом случае, они? «просто» проверить учетные данные (то, что они должны;)))

+0

Похоже, вы используете версию RC1 или ранее. Я не думаю, что стоит попытаться понять, потому что это может быть ошибка Microsoft. Я бы обновил RC2 и посмотрю, что произойдет. –

ответ

1

TL; DR: Если у вас есть собственный менеджер пользователей, убедитесь, что для реализации GetSecurityStampAsync, UpdateSecurityStampAsync и установить SupportsUserSecurityStamp истину.


Решение довольно просто (но я не нашел его нигде в документах). Поскольку работает реализация по умолчанию (Create new ASP MVC6 App ...), я проверил их таблицы БД и нашел штамп безопасности (который я не реализовал). В соответствии с ответом на этот вопрос What is ASP.NET Identity's IUserSecurityStampStore<TUser> interface? эта марка проверяется каждые 30 минут, что удивительно подходит для моей проблемы. Таким образом, все, что я сделал расширялся свой собственный UserManager с

public class MinervaUserManager:UserManager<MinervaUser> 
// Minerva being the name of the project 
{ 
... 
    public override bool SupportsUserSecurityStamp 
    { 
     get 
     { 
      return true; 
     } 
    } 
    public override async Task<string> GetSecurityStampAsync(MinervaUser user) 
    { 
     // Todo: Implement something useful here! 
     return "Token"; 
    } 

    public override async Task<IdentityResult> UpdateSecurityStampAsync(MinervaUser user) 
    { 
     // Todo: Implement something useful here! 
     return IdentityResult.Success; 
    } 

Эти манекены всегда возвращают один и тот же SecurityStamp и «успех» на каждом обновлении. Это так же безопасно, как отсутствие безопасности на всех битах, препятствующих выходу из системы.

 Смежные вопросы

  • Нет связанных вопросов^_^