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

Jea*_*ean 23 asp.net iis asp.net-identity asp.net-core

我正在使用ASP.Net Core和MS Identity,我试着理解为什么在每次部署后登录用户都会被注销.我在IIS 8.5上运行

我一直在尝试此线程中的方法(设置静态机器密钥) ASP.NET Identity 2在部署后 通过在IIS UI中的服务器级别生成静态密钥并将以下内容添加到网站的web.config来重新登录:

<system.web>
    <machineKey validationKey="XXX"
        decryptionKey="XXX"
        validation="SHA1" decryption="AES"/>
</system.web>
Run Code Online (Sandbox Code Playgroud)

但问题仍然存在:

  • 用户登录
  • 停止网站
  • 开始网站
  • 用户需要再次登录

但我也这样说:

  • 用户登录
  • 重启网站
  • 用户仍然登录

什么可以导致用户注销?有关如何避免这种情况的任何想法?

Jea*_*ean 15

(克里斯评论后,解决方案分成了单独的答案)

我找到了一个保持登录状态的解决方案,它可以在网站停止/启动时保持不变,并更新网站源文件夹:

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));
}
Run Code Online (Sandbox Code Playgroud)

使用这些附加行和机器密钥集,登录数据将在站点停止/启动和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

  • 你拯救了我的一天!部署文档中的更多信息 https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?tabs=aspnetcore2x#data-protection (2认同)

Ser*_*ets 6

身份验证使用数据保护堆栈。如果未配置数据保护,密钥将保存在内存中,并在应用程序重新启动时丢弃。

如果应用程序重新启动时密钥环存储在内存中:

  • 所有基于 cookie 的身份验证令牌都将失效。
  • 用户需要在下次请求时再次登录。
  • 任何用密钥环保护的数据都无法再解密。这可能包括 CSRF 令牌和 ASP.NET Core MVC 临时数据 cookie。

您必须配置数据保护,这里有更多信息https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?tabs=aspnetcore2x#data-protection