Можно ли установить ASP.NET ExpireTimeSpan файлов cookie безопасности Owin для каждого пользователя?
У нас есть ASP.NET MVC 5 приложение с использованием аутентификации OWIN cookie. В настоящее время мы настраиваем аутентификацию cookie следующим образом:
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
var timeoutInMinutes = int.Parse(ConfigurationManager.AppSettings["cookie.timeout-minutes"]);
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
AuthenticationMode = AuthenticationMode.Active,
LoginPath = new PathString("/"),
ExpireTimeSpan = TimeSpan.FromMinutes(timeoutInMinutes),
SlidingExpiration = true,
LogoutPath = new PathString("/Sessions/Logout")
});
}
}
У нас есть запрос функции, чтобы позволить администраторам нашего приложения настраивать таймауты сеанса в своих организациях. Однако приведенный выше код конфигурации выполняется на уровне приложения MVC, и наше приложение является многопользовательским. Кто-нибудь знает способ установить ExpireTimeSpan сеанса пользователя на основе каждого пользователя, либо во время аутентификация или переопределение события конвейера Owin где-то?
спасибо заранее!
1 ответов
параметры проверки подлинности содержит свойство с именем Provider
. Вы можете либо установить это в поставщик по умолчанию и использовать один из переопределений метода, таких как OnResponseSignIn
чтобы изменить настройки входа в систему, или вы можете реализовать свой собственный ICookieAuthenticationProvider
и сделать то же самое.
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
Provider = new CookieAuthenticationProvider
{
OnResponseSignIn = signInContext =>
{
var expireTimeSpan = TimeSpan.FromMinutes(15);
if (signInContext.Properties.Dictionary["organization"] == "org-1")
{
expireTimeSpan = TimeSpan.FromMinutes(45);
}
signInContext.Properties.ExpiresUtc = DateTime.UtcNow.Add(expireTimeSpan);
}
}
});
вы можете либо проверить входящее утверждение, чтобы узнать, как следует обрабатывать сеанс, либо добавить пользовательские данные в вызов входа.
context.Authentication.SignIn(new AuthenticationProperties
{
Dictionary =
{
{ "organization", "org-3" }
}
}, new ClaimsIdentity());
вы даже можете установить ExpiresUtc
на знак в вызове, если вы действительно хотите, хотя, возможно, лучше оставить эту логику в поставщике аутентификации, чтобы было проще управлять.