我正在使用ASP.Net Core和MS Identity,我试着理解为什么在每次部署后登录用户都会被注销。 我正在运行IIS 8.5
我一直在尝试此线程中的方法(设置静态机器密钥) ASP.NET Identity 2 relogin after deploy 通过在IIS UI中的服务器级别生成静态密钥,并将以下内容添加到网站的web.config中:
<system.web>
<machineKey validationKey="XXX"
decryptionKey="XXX"
validation="SHA1" decryption="AES"/>
</system.web>
然而问题仍然存在:
但我也是这样:
什么可以导致用户注销?有关如何避免这种情况的任何想法?
答案 0 :(得分:14)
(解决方案在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://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview
justserega提出的更多建议: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?tabs=aspnetcore2x#data-protection
答案 1 :(得分:2)
身份验证使用数据保护堆栈。如果未配置数据保护,则密钥将保留在内存中,并在应用重新启动时被丢弃。
如果应用重启时钥匙圈存储在内存中:
您必须在https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?tabs=aspnetcore2x#data-protection
配置数据保护,更多信息