我使用的是ASP。Net Core和MS Identity,我试图理解为什么每次部署后登录用户都会注销。我正在运行IIS 8.5
我一直在尝试这个线程中的方法(设置静态机器键)ASP。. NET Identity 2部署后重新登录通过在IIS UI的服务器级别生成静态密钥,并将以下内容添加到web。网站配置:
<system.web>
<machineKey validationKey="XXX"
decryptionKey="XXX"
validation="SHA1" decryption="AES"/>
</system.web>
但是问题仍然存在:
- 用户登录 <
- 停止网站/gh><
- 开始网站/gh>
- 用户需要重新登录
但是我也这样写:
- 用户登录
- 重启网站
- 用户仍在登录
什么会导致用户注销?有办法避免吗?
(根据Chris的评论拆分为一个单独的答案)
我找到了一个解决方案,以保持登录状态,它幸存的网站停止/启动,并更新网站源文件夹:
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
// This helps surviving a restart: a same app will find back its keys. Just ensure to create the folder.
.PersistKeysToFileSystem(new DirectoryInfo("\MyFolder\keys\"))
// This helps surviving a site update: each app has its own store, building the site creates a new app
.SetApplicationName("MyWebsite")
.SetDefaultKeyLifetime(TimeSpan.FromDays(90));
}
有了这些额外的行和机器密钥设置,登录数据将在站点停止/启动和IIS服务器重新启动后保留,如果站点重新构建。
更多信息请访问:https://learn.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview
justserega提出的更多建议:https://learn.microsoft.com/en us/aspnet/core/host -和- deploy/iis/advanced?view=aspnetcore - 6.0 #数据保护
身份验证使用数据保护堆栈。如果没有配置数据保护,键保存在内存中,并在应用重启时丢弃。
如果钥匙环在应用程序重启时存储在内存中:
- 所有基于cookie的认证令牌无效。
- 用户下次请求时需要重新登录。 任何被密匙环保护的数据都不能再被解密。这可能包括CSRF令牌和ASP。. NET Core MVC tempdata cookies.
你必须配置数据保护,更多信息在这里https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/advanced?view=aspnetcore-6.0#data-protection
我可以通过进入网站的应用程序池,在高级设置下设置"加载用户配置文件"来解决这个问题。
则在Startup.cs
中使用:
services.AddSession(options =>
{
//Set whatever options you want here
options.Cookie.IsEssential = true;
options.IdleTimeout = TimeSpan.FromDays(365);
});
...
app.UseSession();
我不肯定,但services.AddDistributedMemoryCache();
可能是需要的,有帮助的或其他有用的。
我在IIS和机器密钥中尝试了会话状态和很多,很多,更多,但是没有一个是需要的,只是一个基本的登录会话通过发布或重新启动。