ASP.部署后网核心身份登录状态丢失



我使用的是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和机器密钥中尝试了会话状态和很多,很多,更多,但是没有一个是需要的,只是一个基本的登录会话通过发布或重新启动。

相关内容

  • 没有找到相关文章

最新更新