L'idea è di impostare diversi valori di Timeout sessione per ruoli utente diversi in ASP.NET MVC 5 e identità ASP.NET.È possibile personalizzare il timeout della sessione per i ruoli in ASP.NET MVC 5
È possibile fare?
L'idea è di impostare diversi valori di Timeout sessione per ruoli utente diversi in ASP.NET MVC 5 e identità ASP.NET.È possibile personalizzare il timeout della sessione per i ruoli in ASP.NET MVC 5
È possibile fare?
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"];
}
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);
}
}
}
});
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
Funzionerà per ASP.NET MVC 5 e identità ASP.NET? –
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
Funzionerà solo se si sta utilizzando la sessione, che non è abilitata per impostazione predefinita, AFAIK – sobelito