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

时间:2016-11-13 15:55:39

标签: asp.net iis asp.net-core asp.net-identity

我正在使用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>

然而问题仍然存在:

  • 用户登录
  • 停止网站
  • 启动网站
  • 用户需要再次登录

但我也是这样:

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

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

2 个答案:

答案 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)

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

如果应用重启时钥匙圈存储在内存中:

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

您必须在https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?tabs=aspnetcore2x#data-protection

配置数据保护,更多信息