【问题标题】:Machine key implementation in .NET Core 3.1.NET Core 3.1 中的机器密钥实现
【发布时间】:2020-12-25 20:24:38
【问题描述】:

在 ASP.NET 中,我们通常会像这样将机器密钥添加到 web.config -

<machineKey validation="HMACSHA512" decryption="AES" validationKey="********" decryptionKey="******" />

有人可以告诉我如何在 ASP.NET Core 3.1 中做同样的事情吗?

【问题讨论】:

  • 为什么在 asp.net core 中需要它?
  • 我正在努力将 ASP.NET 应用程序升级到 Core 3.1。所以需要为Core 3.1配置相同的机器密钥或任何其他方法。

标签: asp.net-core asp.net-core-3.1 .net-core-3.1


【解决方案1】:

要为您网站上的多个 Web 应用程序启用 SSO(单点登录),请确保在所有 Web 应用程序的 Startup.cs 中添加 DataProtection 并设置相同的 ApplicationName,将密钥保存到同一目录并使用相同的 cookie 名称如下:

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";
            });

Core 中不再使用 machineKey,而不再使用validationKey 和decryptionKey,只会使用masterkey,并且会在您指定的目录中自动创建。

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

【讨论】:

    【解决方案2】:

    在 Asp.net Core Application 中,您可以使用 Data Protection API 实现 <machineKey> 元素。

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

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

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

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

    应用程序运行后,生成的文件内容如下:

    以上代码配置了一个基于文件系统的密钥仓库来存储机器密钥,你也可以使用 Azure Storage、Redis、Registry 或 Entity Framework Core。更多详细信息,请查看Key storage providers in ASP.NET Core

    【讨论】:

    • 在bin中生成密钥文件后,我是否应该将**值**替换为validationKeyPublicToken替换为decryptionKey (如上图所示),很抱歉这个愚蠢的问题,但我是新手,所以对实现有点困惑?这些 machineKeys 与 Redis Cache 相关。
    【解决方案3】:

    你需要安装这个包:Microsoft.AspNetCore.DataProtection.SystemWeb 它需要是 ASP.NET 4.5.1+。

    在此处阅读更多信息:Replace the ASP.NET machineKey in ASP.NET Core

    【讨论】:

    猜你喜欢
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 2020-09-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    相关资源
    最近更新 更多