解决 ASP.NET CORE Identity 部署后需要重新登录

2019/04/10

174

原因

ASP.NET Core 数据保护堆栈由多个 ASP.NET Core 中间件使用,包括用于身份验证的中间件。 即使用户代码不调用数据保护 API,也应该使用部署脚本或在用户代码中配置数据保护,以创建持久的加密密钥存储。 如果不配置数据保护,则密钥存储在内存中。重启应用时,密钥会被丢弃。

如果密钥环存储于内存中,则在应用重启时:

参考资料

配置 ASP.NET Core 数据保护

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("Keys"))
            // This helps surviving a site update: each app has its own store, building the site creates a new app
            .SetApplicationName("DogHappy");
}

PersistKeysToFileSystem

将密钥存储在 UNC 共享而不是在 %LOCALAPPDATA%

**警告:**如果更改密钥持久性位置时,系统将不再会自动加密静态情况下,密钥由于它不知道是否 DPAPI 是一种合适的加密机制。

SetApplicationName

默认情况下,数据保护系统隔离应用中的另一个基于其内容根路径,即使它们共享同一个物理密钥存储库。 这可以防止应用程序了解彼此的受保护的负载。

评论