risposta

2

Sulla base del loro ruolo è possibile impostare il timeout, cioè

HttpContext.Current.Session.Timeout = 20; 

Andando con la tua domanda precedente si vuole fare questo in modo dinamico. È possibile memorizzare e aggiornare i tempi stessi in sessione e impostare per ciascun ruolo su OnActionExecuting di un controller di base.

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

Funzionerà per ASP.NET MVC 5 e identità ASP.NET? –

+1

funzionerà per Mvc5. Come stai implementando Identity? Hai un controller di base? Dovrebbe andare bene Il tuo controllo nei confronti dell'utente potrebbe essere diverso ma la sessione è la stessa. – dove

+0

Funzionerà solo se si sta utilizzando la sessione, che non è abilitata per impostazione predefinita, AFAIK – sobelito

5

Se si sta tentando di fare il boot amministratori prima di quanto gli utenti regolari, qui è il mio stub su questo in Identità.

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

Ho trovato questo articolo mi ha dato una migliore comprensione della risposta sopra: ASPNET Identity Cookie Timeout Timeouts di autenticazione da utilizzare con Identity e MVC5: http://www.jamessturtevant.com/posts/ASPNET-Identity-Cookie-Authentication-Timeouts/ – sobelito

Problemi correlati