Ersetzen Sie ASP.NET machineKey in ASP.NET Core

Die Implementierung des <machineKey> -Elements in ASP.NET <machineKey> Dadurch können die meisten Aufrufe ASP.NET Kryptografieroutinen über einen Ersatzmechanismus zum Schutz von Daten, einschließlich des neuen Datenschutzsystems, geroutet werden.

Paketinstallation

Hinweis

Das neue Datenschutzsystem kann nur in einer vorhandenen ASP.NET für .NET 4.5.1 oder höher installiert werden. Die Installation kann nicht abgeschlossen werden, wenn die Anwendung auf .NET 4.5 oder niedriger zielt.

Um das neue Datenschutzsystem in einem vorhandenen ASP.NET 4.5.1+-Projekt zu installieren, installieren Sie das Paket Microsoft.AspNetCore.DataProtection.SystemWeb. Dadurch wird das Datenschutzsystem mithilfe der Standardkonfigurationseinstellungen instanziiert.

Wenn Sie das Paket installieren, wird eine Zeile inWeb.config eingefügt, die ASP.NET an weist, es für die meisten kryptografischen Vorgänge zu verwenden,einschließlich Formularauthentifizierung, Ansichtszustand und Aufrufe von MachineKey.Protect. Die Datenschutz-API wird nicht verwendet. Die eingefügte Zeile lautet wie folgt.

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

Tipp

Sie können feststellen, ob das neue Datenschutzsystem aktiv ist, indem Sie Felder wie überprüfen, die wie im folgenden Beispiel mit __VIEWSTATE "CfDJ8" beginnen sollten. "CfDJ8" ist die Base64-Darstellung des magic-Headers "09 F0 C9 F0", der eine durch das Datenschutzsystem geschützte Nutzlast identifiziert.

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

Paketkonfiguration

Das Datenschutzsystem wird mit einer Standardmäßigkonfiguration ohne Setup instanziiert. Da Schlüssel jedoch standardmäßig im lokalen Dateisystem gespeichert werden, funktioniert dies nicht für Anwendungen, die in einer Farm bereitgestellt werden. Um dies zu beheben, können Sie die Konfiguration bereitstellen, indem Sie einen Typ erstellen, der DataProtectionStartup untergliedert und dessen ConfigureServices-Methode überschreibt.

Im Folgenden finden Sie ein Beispiel für einen benutzerdefinierten Starttyp für den Datenschutz, der sowohl konfiguriert, wo Schlüssel gespeichert werden, als auch wie sie im Ruhedatenschutz verschlüsselt werden. Außerdem wird die Standardrichtlinie für die App-Isolation überschrieben, indem ein eigener Anwendungsname angegeben wird.

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

Tipp

Sie können auch statt <machineKey applicationName="my-app" ... /> eines expliziten Aufrufs von SetApplicationName verwenden. Dies ist ein komfortabler Mechanismus, um zu vermeiden, dass der Entwickler gezwungen wird, einen von DataProtectionStartup abgeleiteten Typ zu erstellen, wenn er nur den Anwendungsnamen festlegen möchte.

Um diese benutzerdefinierte Konfiguration zu aktivieren, wechseln Sie zurück zu Web.config und suchen Sie nach dem Element, das die Paketinstallierung <appSettings> der Konfigurationsdatei hinzugefügt hat. Es sieht wie das folgende Markup aus:

<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>

Geben Sie den leeren Wert mit dem durch die Assembly qualifizierten Namen des von DataProtectionStartup abgeleiteten Typs ein, den Sie gerade erstellt haben. Wenn der Name der Anwendung DataProtectionDemo ist, sieht dies wie folgt aus.

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

Das neu konfigurierte Datenschutzsystem kann jetzt innerhalb der Anwendung verwendet werden.