ASP.Net Core身份验证与分布式会话

4
我正在使用Identity在我的ASP.NET应用程序中,但是在AWS上运行两个Web服务器时会遇到问题,即当您在一个服务器上登录时,在另一个服务器上不会被登录,因为它们不共享同一个会话。
例如,当我部署应用程序的新版本时,这也是一个问题 - 然后用户将被注销并且必须再次登录。
我尝试在我的Configure方法中添加了一个Redis分布式缓存来解决这个问题。
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();

有什么我可以做的想法吗?


你可以尝试将身份相关的数据存储在数据库中吗?你也可以搜索基于REDIS的ASP.Net身份提供者,我相信你会找到一些好的NuGet包。 - Manoj Aggarwal
1
身份验证不使用会话,因此问题可能出在其他地方。 - trailmax
1个回答

2
我已经解决了!首先,我将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();    

此外,在使用外部登录时,我将_signInManager.ExternalLoginSignInAsyncisPersistent参数设置为true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接