2016-05-20 18 views
0

UPDATE:ASP.NETコア1.0 - MVC 6 - Cookieの有効期限

それは間違いなく、RC1のバグではありません。クッキーの設定は、デフォルトのUserManagerとUserStoreで動作しているので、UserManager/UserStoreに関連したものでなければなりません。私は永続的なログインに問題がある

https://github.com/jesblit/ASPNET5-FormAuthenticationLDAP

オリジナルのポスト:私は基本的に、ここでの実装を使用しています。どのようにCookieを設定しても、30分後にユーザーは自動的にログアウトされます(ユーザーがアプリケーションとどのくらいやりとりをしていても)。

私のセットアップ私のアプリで:

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で設定したExpiration Timeoutsは何の効果もありません。ログイン - > 30分 - >自動的にこの期間を延長するためにはどのように過ごし:(

をログアウト

(ところで:?カスタムユーザーを、のUserManager、USERSTOREはどのような方法でtehのクッキーと干渉しない、彼ら))

+0

RC1以前のバージョンを使用しているようです。私はそれがMicrosoftのバグかもしれないので、それを理解しようとする価値はないと思う。私はRC2に更新し、何が起こるか見る。 –

答えて

1

TL;(彼らはになっているもの);「だけ」資格情報を検証DR:カスタム・ユーザー・マネージャを使用している場合は、GetSecurityStampAsync、UpdateSecurityStampAsyncを実装し、trueにSupportsUserSecurityStampを設定してください。


これに対する解決策はかなりシンプルです(ただし、ドキュメントのどこにも見つかりませんでした)。既定の実装(Create new ASP MVC6 App ...)が機能するので、DBテーブルをチェックして、セキュリティスタンプを見つけました(実装していません)。この質問への回答What is ASP.NET Identity's IUserSecurityStampStore<TUser> interface?によると、このスタンプは30分ごとに再確認され、驚くほど私の問題に合っています。だから、私はすべてのこれらの人形は、常にすべてのアップデートで同じSecurityStampと「成功」を返す

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; 
    } 

で自分のUserManagerを延長しました。これは、すべてのビットでSecurityStampを持たないことでログアウトができないほど安全です。

関連する問題