Freigeben über


Migrieren ASP.NET machineKey mithilfe von System.Web-Adaptern

Hinweis

Dadurch werden die System.Web Adapter verwendet, um die Migration zu vereinfachen.

Konfigurieren Sie in der ASP.NET Framework-App <machineKey> und den System.Web-Adapter-Host, damit beide Apps eine kompatible Datenschutzkonfiguration gemeinsam nutzen können. Vollständige Hintergrundinformationen zum Ersetzen von <machineKey> finden Sie unter Ersetzen des ASP.NET machineKey in ASP.NET Core.

Dieser Leitfaden baut auf dem System.Web Adapterhostmodell auf, sodass Datenschutzdienste im Hostabhängigkeitsinjektionscontainer (DI) registriert und in der ASP.NET Framework-App zur Verfügung gestellt werden. Durch die Integration in die Host-DI, die von den Adaptern bereitgestellt wird, können vorhandene ASP.NET Framework-Komponenten IDataProtectionProvider, IDataProtector und verwandte Typen auflösen.

Sowohl die ASP.NET Framework-App als auch die ASP.NET Core-App müssen einen gemeinsamen Anwendungsnamen und ein Schlüssel-Repository für den Datenschutz verwenden, damit geschützte Daten zwischen den Apps ausgetauscht werden können.

  • Rufen Sie SetApplicationName mit demselben logischen Anwendungsnamen in beiden Apps auf (z. B. "my-app").
  • Konfigurieren Sie PersistKeysToFileSystem so, dass sie auf denselben Wichtigen Repositoryspeicherort verweist, den beide Apps lesen und schreiben können.

Hinweis

Das mit PersistKeysToFileSystem verwendete Verzeichnis ist der Speicher für die gemeinsam genutzten Datenschutzschlüssel. Verwenden Sie in der Produktion einen dauerhaften, freigegebenen Speicher (z. B. eine UNC-Freigabe, Redis oder Azure Blob Storage), und befolgen Sie die wichtigsten Verwaltungsanleitungen unter Konfigurieren ASP.NET Core Data Protection und ASP.NET Core Data Protection Overview.

Konfigurieren der ASP.NET Framework-App

Um diese Konfiguration in der ASP.NET Framework-App zu implementieren, stellen Sie sicher, dass das Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices Paket in der ASP.NET Framework-App installiert ist.

Wenn Sie das Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices Paket in einer ASP.NET Framework App installieren, wird <machineKey> normalerweise automatisch konfiguriert. Wenn <machineKey> nicht vorhanden ist oder Sie die Einstellungen überprüfen müssen, konfigurieren Sie `` in Web.config, um den Kompatibilitätsdatenprotektor zu verwenden, wie gezeigt:

<configuration>
  <system.web>
    <httpRuntime targetFramework="4.8.1" />
    <machineKey
      compatibilityMode="Framework45"
      dataProtectorType="Microsoft.AspNetCore.DataProtection.SystemWeb.CompatibilityDataProtector,
      Microsoft.AspNetCore.DataProtection.SystemWeb" />
  </system.web>
</configuration>

Global.asax.csRegistrieren Sie als Nächstes den Host der System.Web-Adapter, und konfigurieren Sie den Datenschutz unter Verwendung desselben Anwendungsnamens und des Schlüssel-Repositorys, das von der ASP.NET Core-App verwendet wird. Das folgende Beispiel wird aus dem MachineKey Framework-Beispiel angepasst:

using System.IO;
using System.Web;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.SystemWebAdapters.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace DataProtectionDemo
{
    public class MvcApplication : HttpApplication
    {
        protected void Application_Start()
        {
            HttpApplicationHost.RegisterHost(builder =>
            {
                builder.AddServiceDefaults();

                builder.AddDataProtection()
                    .SetApplicationName("my-app")
                    .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\myapp-keys\"));
            });
        }
    }
}

Diese Konfiguration:

  • Legt einen freigegebenen Anwendungsnamen (my-app) fest, den die ASP.NET Core-App ebenfalls verwenden muss.
  • Konfiguriert ein freigegebenes Schlüssel-Repository (z. B. ein UNC-Share), auf das beide Apps zugreifen können.
  • Stellt sicher, dass <machineKey> Vorgänge (Formularauthentifizierung, Ansichtsstatus MachineKey.Protectund zugehörige APIs) über ASP.NET Kerndatenschutz weitergeleitet werden.
  • Wird als Teil des ASP.NET Framework-Hosts ausgeführt, sodass vorhandene <machineKey>- basierte Features dasselbe Datenschutzsystem wie ASP.NET Core verwenden.

Konfigurieren einer ASP.NET Core-App

Für den Datenschutz in der ASP.NET Core-App ist keine zusätzliche Konfiguration erforderlich. Konfigurieren Sie einfach denselben Anwendungsnamen und den gleichen Schlüsselspeicherort, den die ASP.NET Framework-App verwendet.

using Microsoft.AspNetCore.DataProtection;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDataProtection()
    .SetApplicationName(MachineKeyExampleHandler.AppName)
    .PersistKeysToFileSystem(
        new DirectoryInfo(Path.Combine(Path.GetTempPath(), "sharedkeys", MachineKeyExampleHandler.AppName)));

var app = builder.Build();

// Configure application

app.Run();