Antwort

2

Auf der Grundlage ihrer Rolle, die Sie den Timeout einstellen könnte, das heißt

HttpContext.Current.Session.Timeout = 20; 

durch Ihre vorherige Frage gehen wollen Sie diese dynamisch tun. Sie können die Zeiten selbst in der Sitzung speichern und aktualisieren und für jede Rolle auf OnActionExecuting eines Basiscontrollers festlegen.

if (User.IsInRole("Admin")) 
    { 
     filterContext.HttpContext.Session.Timeout = 
(int)filterContext.HttpContext.Session["AdminTimeoutThatYouSetSomewhereElseGlobally"]; 
    } 
+0

Funktioniert es für ASP.NET MVC 5 und ASP.NET Identity? –

+1

wird für Mvc5 funktionieren. Wie implementierst du Identität? Hast du einen Basiscontroller? Es sollte in Ordnung sein. Ihre Prüfung für den Benutzer ist möglicherweise anders, aber die Sitzung ist identisch. – dove

+0

Funktioniert nur, wenn Sie Sitzung verwenden, die nicht standardmäßig aktiviert ist, AFAIK – sobelito

5

Wenn Sie versuchen, Admins früher als normale Benutzer zu booten, hier ist mein Stub in Identity.

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    // other stuff 
    Provider = new CookieAuthenticationProvider 
    { 
     // this function is executed every http request and executed very early in the pipeline 
     // and here you have access to cookie properties and other low-level stuff. 
     // makes sense to have the invalidation here 
     OnValidateIdentity = async context => 
     { 
      // invalidate user cookie if user's security stamp have changed 
      var invalidateBySecirityStamp = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
        validateInterval: TimeSpan.FromMinutes(30), 
        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)); 
      await invalidateBySecirityStamp.Invoke(context); 

      // check if user is in admin role 
      var isAdmin = context.Identity.Claims.Any(c => c.Type == ClaimTypes.Role && c.Value == "AdminRoleName"); 

      // check if enough time has passed to invalidate cookie 
      var currentUtc = DateTimeOffset.UtcNow; 
      if (context.Options != null && context.Options.SystemClock != null) 
      { 
       currentUtc = context.Options.SystemClock.UtcNow; 
      } 

      var issuedUtc = context.Properties.IssuedUtc; 
      var bootThemOut = (issuedUtc == null); 
      if (issuedUtc != null) 
      { 
       var timeElapsed = currentUtc.Subtract(issuedUtc.Value); 
       bootThemOut = timeElapsed > TimeSpan.FromMinutes(3); // invalidate admin cookies in 3 minutes 
      } 

      if (isAdmin && bootThemOut) 
      { 
       context.RejectIdentity(); 
       context.OwinContext.Authentication.SignOut(context.Options.AuthenticationType); 
      } 
     } 
    } 
});    
+1

Ich fand diesen Artikel gab mir ein besseres Verständnis der Antwort oben re: ASPNET Identität Cookie-Authentifizierung Timeouts Timeouts für die Verwendung mit Identity und MVC5: http://www.jamessturtevant.com/posts/ASPNET-Identity-Cookie-Authentication-Timeouts/ – sobelito