Новый штамп безопасности создается только в том случае, если пользователь меняет свой пароль или отменяет связь с внешним логином. Повар ie по умолчанию проверяется через интервал 30 минут. поскольку вы используете самую последнюю версию. net -core, вы можете использовать следующий фрагмент кода в ConfigureServices()
в startup.cs
, чтобы продлить время проверки.
Если время установлено на 0, оно будет проверяться при каждом запросе
services.Configure<SecurityStampValidatorOptions>(options =>
{
// This is the key to control how often validation takes place
options.ValidationInterval = TimeSpan.FromMinutes(30);
});
Примечание : UserManager позволяет обновить марку безопасности с использованием метода userManager.UpdateSecurityStampAsync(user)
. если вы используете это после входа в систему, проверка вероятности не удастся.
Наконец, если вы хотите обрабатывать это поведение по-своему, вы можете написать свой собственный валидатор и связку в промежуточном программном обеспечении
services.AddAuthentication(options =>
{
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
}).AddCookie(options =>
{
options.Events.OnValidatePrincipal = LastChangedValidator.ValidateAsync;
});
public static class LastChangedValidator
{
public static async Task ValidateAsync(CookieValidatePrincipalContext context)
{
// you can use your own logic
/* var userRepository = context.HttpContext.RequestServices.GetRequiredService<IUserRepository>();
var userPrincipal = context.Principal;
// Look for the last changed claim.
string lastChanged;
lastChanged = (from c in userPrincipal.Claims
where c.Type == "LastUpdated"
select c.Value).FirstOrDefault();
if (string.IsNullOrEmpty(lastChanged) ||
!userRepository.ValidateLastChanged(userPrincipal, lastChanged))
{
context.RejectPrincipal();
await context.HttpContext.Authentication.SignOutAsync("MyCookieMiddlewareInstance");
} */
}
}
Или вы можете обработать ValidatePrincipal()
переопределив метод с помощью следующего
public class CustomCookieHandler: CookieAuthenticationEvents
{
public override Task ValidatePrincipal(CookieValidatePrincipalContext context)
{
return base.ValidatePrincipal(context);
}
}