Nahrazení ASP.NET machineKey v ASP.NET Core

Implementace <machineKey> prvku v ASP.NET je nahraditelná. To umožňuje většině volání ASP.NET kryptografických rutin směrovaných prostřednictvím náhradního mechanismu ochrany dat, včetně nového systému ochrany dat.

Instalace balíčku

Poznámka

Nový systém ochrany dat je možné nainstalovat pouze do existujícího ASP.NET aplikace, která cílí na .NET 4.5.1 nebo novější. Instalace selže, pokud aplikace cílí na .NET 4.5 nebo nižší.

Pokud chcete nový systém ochrany dat nainstalovat do existujícího projektu ASP.NET 4.5.1+, nainstalujte balíček Microsoft.AspNetCore.DataProtection.SystemWeb. Tím se vytvoří instance systému ochrany dat pomocí výchozího nastavení konfigurace .

Při instalaci balíčku vloží řádek do souboru Web.config , který informuje ASP.NET, aby ho používal pro většinu kryptografických operací, včetně ověřování formulářů, zobrazení stavu a volání MachineKey.Protect. Nepoužívá rozhraní API pro ochranu dat. Vložený řádek se přečte následujícím způsobem.

<machineKey compatibilityMode="Framework45" dataProtectorType="..." />

Tip

Pokud chcete zjistit, jestli je nový systém ochrany dat aktivní, zkontrolujte pole jako __VIEWSTATE, která by měla začínat na "CfDJ8" jako v následujícím příkladu. "CfDJ8" je reprezentace magic "09 F0 C9 F0 F0", která identifikuje datovou část chráněnou systémem ochrany dat.

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="CfDJ8AWPr2EQPTBGs3L2GCZOpk...">

Konfigurace balíčku

Systém ochrany dat se vytvoří instance s výchozí konfigurací nulové instalace. Vzhledem k tomu, že ve výchozím nastavení jsou klíče trvalé v místním systému souborů, nebude to fungovat pro aplikace nasazené ve farmě. Pokud chcete tento problém vyřešit, můžete zadat konfiguraci vytvořením typu, který podtřídy DataProtectionStartup a přepíše jeho Metodu ConfigureServices.

Níže je příklad spouštěcího typu vlastní ochrany dat, který nakonfiguroval, kde jsou klíče trvalé a jak se šifrují v klidovém stavu. Přepíše také výchozí zásady izolace aplikace tím, že poskytne vlastní název aplikace.

using System;
using System.IO;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.DataProtection.SystemWeb;
using Microsoft.Extensions.DependencyInjection;

namespace DataProtectionDemo
{
    public class MyDataProtectionStartup : DataProtectionStartup
    {
        public override void ConfigureServices(IServiceCollection services)
        {
            services.AddDataProtection()
                .SetApplicationName("my-app")
                .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\myapp-keys\"))
                .ProtectKeysWithCertificate("thumbprint");
        }
    }
}

Tip

Místo explicitního volání setApplicationName můžete použít <machineKey applicationName="my-app" ... /> také místo explicitního volání. Jedná se o mechanismus usnadnění, který zabrání vývojáři vytvořit odvozený typ DataProtectionStartup, pokud vše, co chtěli nakonfigurovat, nastavil název aplikace.

Pokud chcete povolit tuto vlastní konfiguraci, vraťte se do souboru Web.config a vyhledejte <appSettings> prvek, který balíček nainstaloval do konfiguračního souboru. Bude vypadat jako následující kód:

<appSettings>
  <!--
  If you want to customize the behavior of the ASP.NET Core Data Protection stack, set the
  "aspnet:dataProtectionStartupType" switch below to be the fully-qualified name of a
  type which subclasses Microsoft.AspNetCore.DataProtection.SystemWeb.DataProtectionStartup.
  -->
  <add key="aspnet:dataProtectionStartupType" value="" />
</appSettings>

Vyplňte prázdnou hodnotu názvem kvalifikovaného sestavení odvozeného typu DataProtectionStartup, který jste právě vytvořili. Pokud je název aplikace DataProtectionDemo, vypadalo by to jako v následujícím příkladu.

<add key="aspnet:dataProtectionStartupType"
     value="DataProtectionDemo.MyDataProtectionStartup, DataProtectionDemo" />

Nově nakonfigurovaný systém ochrany dat je teď připravený k použití uvnitř aplikace.