Asp.net core .NETCore3.1中的机器密钥实现

Asp.net core .NETCore3.1中的机器密钥实现,asp.net-core,asp.net-core-3.1,.net-core-3.1,Asp.net Core,Asp.net Core 3.1,.net Core 3.1,在ASP.NET中,我们通常会向web.config添加一个机器密钥,如下所示- 有人能告诉我如何在ASP.NET Core 3.1中执行相同的操作吗?您需要安装此软件包:Microsoft.AspNetCore.DataProtection.SystemWeb 它需要是ASP.NET 4.5.1+ 阅读此处的更多信息:在Asp.net核心应用程序中,您可以使用实现元素 要在asp.net core应用程序中使用数据保护API,请首先安装软件包Microsoft.AspNetCore.Data

在ASP.NET中,我们通常会向web.config添加一个机器密钥,如下所示-


有人能告诉我如何在ASP.NET Core 3.1中执行相同的操作吗?

您需要安装此软件包:
Microsoft.AspNetCore.DataProtection.SystemWeb
它需要是ASP.NET 4.5.1+


阅读此处的更多信息:

在Asp.net核心应用程序中,您可以使用实现
元素

要在asp.net core应用程序中使用数据保护API,请首先安装软件包
Microsoft.AspNetCore.DataProtection.SystemWeb
。您可能会遇到警告“warning NU1701…此软件包可能与您的项目不完全兼容”。就我而言,此警告不会影响我们使用此软件包

[注意]新的数据保护系统只能安装到现有的ASP.NET应用程序中,目标是.NET 4.5.1或更高版本。如果应用程序的目标是.NET 4.5或更低版本,安装将失败

然后,在Startup.cs文件中注册数据保护服务,如下所示:

        services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(@"D:\temp\temp-keys\"));
services
    .AddDataProtection()
    .SetApplicationName("MyWebSite") 
    .PersistKeysToFileSystem(new DirectoryInfo(@"C:\MyWebSite-keys"));

services
    .AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
        options =>
        {
                options.LoginPath = "/login/login";
                options.Cookie.Path = "/";
                options.Cookie.Name = "MyWebSite-Login";
            });
运行应用程序后,将生成文件内容,如下所示:

上面的代码配置了一个基于文件系统的密钥存储库来存储机器密钥,您还可以使用Azure存储、Redis、Registry或Entity Framework Core。更多详细信息,请检查

以对站点上的多个web应用程序启用SSO(单点登录),确保在所有web应用程序的Startup.cs中添加数据保护并设置相同的ApplicationName,将密钥保存到相同的目录并使用相同的cookie名称,如下所示:

        services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(@"D:\temp\temp-keys\"));
services
    .AddDataProtection()
    .SetApplicationName("MyWebSite") 
    .PersistKeysToFileSystem(new DirectoryInfo(@"C:\MyWebSite-keys"));

services
    .AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
        options =>
        {
                options.LoginPath = "/login/login";
                options.Cookie.Path = "/";
                options.Cookie.Name = "MyWebSite-Login";
            });
machineKey不再在Core中使用,而不是validationKey和decryptionKey,只有主密钥将被使用,并将在指定的目录中自动创建


在此之后,在登录应用程序A并请求应用程序B后,用户将保持登录状态。

为什么在asp.net core中需要它?我正在将asp.net应用程序升级到core 3.1。因此,需要为Core 3.1配置相同的机器密钥或任何其他方法。我试图安装上述软件包,但收到以下警告:“此软件包可能与您的项目不完全兼容”。目标项目框架是“.NET Core 3.1”,请看一下Microsoft.AspNetCore.DataProtection,因为它是Core 3.1应用程序。在bin中生成密钥文件后,我是否应该用validationKey替换**值**,用decryptionKey替换PublicToken(如上图所示),很抱歉问了一个愚蠢的问题,但我对这一点很陌生,对实现有点困惑?这些机器与Redis缓存相关。