我只是想知道为什么我会因为提问而被禁止!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!???????????????????????????????????????????
此问题仅存在于联机主机中,而不存在于本地主机中。
我观看了本教程,并对我的项目进行了身份验证和授权。在localhost上,这是可以的,但当我切换到带有Plesk的Windows主机(我认为是IIS,但我不确定)的联机主机时,无论我是否使用IsPersistent
(保持用户登录),用户都会在10~20分钟后注销。
builder.Services.AddAuthentication("MyAuth").AddCookie("MyAuth", options =>
{
options.Cookie.Name = "MyAuth";
options.LoginPath = "/login";
options.LogoutPath = "/logout";
options.ExpireTimeSpan = TimeSpan.FromDays(30);
});
List<Claim> claims = new()
{
new Claim(ClaimTypes.NameIdentifier, user.ID.ToString()),
};
ClaimsIdentity identity = new(claims, "MyAuth");
ClaimsPrincipal principal = new(identity);
AuthenticationProperties properties = new() { IsPersistent = login.RememberMe };
await HttpContext.SignInAsync("MyAuth", principal, properties);
我尝试了本教程中的所有内容,但都不起作用。我不知道如何修复它。我搜索了很多,大部分教程都是针对ASP.NET Framework的,而不是针对ASP.NET Core的。
我尝试过的:
- 添加选项。SlidingExpiration=true;到AddAuthentication()。AddCookie
- 将
builder.Services.Configure<SecurityStampValidatorOptions>(o => o.ValidationInterval = TimeSpan.FromHours(10));
添加到程序.cs- 将Utc过期到AuthenticationProperties
更新:我找到了这个,但不知道该怎么办?我找不到那些设置是Plesk。
IIS服务器上的神秘注销
尽管有所有这些设置,您可能会体验到用户正在登录几分钟后离开(如20分钟)。很可能你抓不到在开发应用程序时本地上的这种行为。是的与IIS上的某些设置相关。
要修复此行为,首先需要转到的高级设置应用程序池。您将看到一个名为"空闲超时"的设置(分钟)",并且必须设置为0。其默认值为20分钟。这意味着如果在20分钟内没有新的请求,工作进程将关闭向下
当应用程序重新启动或工作进程重新启动时,如果密钥与保存在存储器中的认证相关;
基于Cookie的身份验证令牌将无效,用户需要以再次登录。
因此,为了保持密钥的持久性,我们需要再设置一个应用程序池的高级设置;必须设置加载用户配置文件为True。因此,密钥将存储在操作系统的文件夹中。(%LOCALAPPDATA%/ASP.NET/DataProtection Keys)
我找到了解决方案。只需在var app = builder.Build();
:之前添加这行代码
builder.Services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(Directory.GetCurrentDirectory())).SetDefaultKeyLifetime(TimeSpan.FromDays(30));