ASP.Net Идентификация ядра с распределенным сеансом

#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