Изменение удостоверения ASP.NET ExpireTimeSpan после ConfigureAuth
Я работаю над веб-приложением, которое я недавно перенес из пользовательского решения аутентификации в ASP.NET Identity. В некоторых разделах нашего приложения выполняются длинные процессы, выполнение которых может занять до часа. В обычных условиях мы хотим, чтобы пользователи автоматически выходили из системы после 30 минут бездействия. Однако для экранов, на которых происходят длительные процессы, мы хотим расширить окно автоматического выхода из системы, чтобы они не вылетали до завершения процесса. В настоящее время я борюсь с тем, как сделать это с помощью идентичности. В настоящее время я использую следующий код в моем файле Startup.Auth.cs:
public partial class Startup
{
// For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301883
public void ConfigureAuth(IAppBuilder app)
{
// Configure the user manager and signin manager to use a single instance per request
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
// Enable the application to use a cookie to store information for the signed in user
// and to use a cookie to temporarily store information about a user logging in with a third party login provider
// Configure the sign in cookie
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Login.aspx"),
ExpireTimeSpan = TimeSpan.FromMinutes(30),
SlidingExpiration = true,
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity =
SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser, int>(
TimeSpan.FromMinutes(30),
(manager, user) => user.GenerateUserIdentityAsync(manager),
userIdentity => userIdentity.GetUserId<int>())
}
});
}
}
В настоящее время я не вижу способа изменить значение ExpireTimeSpan после ConfigureAuth
уже был вызван. Я надеюсь, что смогу изменить значение в Page_Load
обработчик событий со страницы веб-формы. Кто-нибудь знает способ?
1 ответ
Внутри OnValidateIdentity
иначе:
OnValidateIdentity = delegate(CookieValidateIdentityContext context) {
var stampValidator = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser, int>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager),
getUserIdCallback: (id) => (id.GetUserId<int>())
);
Task result = stampValidator.Invoke(context);
int my_custom_minutes = 60; // run your logic here.
// set it at GLOBAL level for all (future) users.
context.Options.ExpireTimeSpan = TimeSpan.FromMinutes( my_custom_minutes );
// set it for the current user only.
context.Properties.ExpiresUtc = context.Properties.IssuedUtc.Value.AddMinutes( my_custom_minutes );
return result;
}