#c# #asp.net #asp.net-mvc #asp.net-identity
#c# #asp.net #asp.net-mvc #asp.net-идентификация
Вопрос:
Я использую идентификацию в своем ASP.NET приложение, но запущенное на двух веб-серверах в AWS, и у вас проблема в том, что когда вы входите в систему на одном сервере, вы не входите в систему на другом, потому что они не используют один и тот же сеанс.
Это также проблема, например, когда я развертываю новую версию своего приложения — тогда пользователи выйдут из системы и должны будут войти снова.
Я попытался добавить распределенный кэш с помощью Redis в моем Configure
методе:
app.UseSession();
И мой ConfigureServices
:
services.AddDistributedRedisCache(options =>
{
options.Configuration = "uri-to-redis-server";
options.InstanceName = "name";
});
services.AddIdentity<ApplicationUser, IdentityRole>(o =>
{
o.Password.RequireNonAlphanumeric = false;
})
.AddEntityFrameworkStores<MyContext>()
.AddDefaultTokenProviders();
services.AddMvc();
services.AddSession();
Есть идеи о том, что я могу сделать?
Комментарии:
1. Можете ли вы попробовать сохранить данные, связанные с идентификацией, в базе данных? Вы также можете выполнить поиск ASP на основе REDIS. Поставщик сетевой идентификации, я уверен, вы найдете какой-нибудь хороший пакет nuget.
2. Идентификатор не использует сеанс, поэтому проблема с чем-то другим
Ответ №1:
Я это исправил! Во-первых, я установил для параметров cookie значение ExpireTimeSpan:
services.AddIdentity<ApplicationUser, IdentityRole>(o =>
{
o.Password.RequireNonAlphanumeric = false;
o.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(24);
o.Cookies.ApplicationCookie.SlidingExpiration = true;
})
.AddEntityFrameworkStores<MyDbContext>()
.AddDefaultTokenProviders();
Кроме того, при использовании внешнего входа я устанавливаю isPersistent
аргумент _signInManager.ExternalLoginSignInAsync
в true