Ответ 1
Среднее промежуточное ПО ASP.NET Identity, которое вы используете, является wraper вокруг некоторых вызовов UseCookieAuthentication
, который включает в себя промежуточное программное обеспечение для проверки подлинности cookie для конвейера. Это можно увидеть в исходном коде для расширений конструктора промежуточного ПО Identity здесь, на GitHub. В этом случае параметры, необходимые для настройки того, как должна работать базовая аутентификация Cookie, инкапсулируются в IdentityOptions
и настраиваются при настройке инъекции зависимостей.
В самом деле, глядя на исходный код, с которым я связан, вы можете видеть, что при вызове app.UseIdentity()
выполняется следующее:
var options = app.ApplicationServices.GetRequiredService<IOptions<IdentityOptions>>().Value;
app.UseCookieAuthentication(options.Cookies.ExternalCookie);
app.UseCookieAuthentication(options.Cookies.TwoFactorRememberMeCookie);
app.UseCookieAuthentication(options.Cookies.TwoFactorUserIdCookie);
app.UseCookieAuthentication(options.Cookies.ApplicationCookie);
return app;
Чтобы настроить класс IdentityOptions
, метод AddIdentity<TUser, TRole>
имеет одну перегруженную версию, которая позволяет настраивать параметры с помощью одной лямбда. Таким образом, вам просто нужно передать лямбду, чтобы настроить параметры. В этом случае вы просто получаете доступ к свойствам Cookies
класса options и настраиваете ApplicationCookie
по желанию. Чтобы изменить временной интервал, вы делаете что-то вроде
services.AddIdentity<ApplicationUser, IdentityRole>(options => {
options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromHours(1);
});
EDIT: Свойство ExpireTimeSpan
используется, только если при вызове HttpContext.Authentication.SignInAsync
мы передаем экземпляр AuthenticationProperties
с IsPersistent
, установленным в true
.
Пробовав только с помощью промежуточного ПО для проверки подлинности в cookie, выясняется, что это работает: если мы просто входим без этой опции, мы получаем файл cookie, который длится для сессии, если мы отправим это вместе, мы получим файл cookie, который длится, что мы при настройке промежуточного программного обеспечения.
С помощью ASP.NET Identity способ сделать - передать параметр IsPersistent
PasswordSignInAsync
со значением true
. Это заканчивается вызовом SignInAsync
HttpContext
, проходящим в AuthenticationProperties
с IsPersistent
, установленным в true. Вызов заканчивается чем-то вроде:
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
Где RememberMe
- это то, что настраивается, если мы устанавливаем IsPersistent
в true или false.