Dela via


Migrera ASP.NET machineKey med hjälp av System.Web-adapters

Anmärkning

På så sätt används System.Web Adapters för att förenkla migreringen.

I ASP.NET Framework-appen konfigurerar du <machineKey> och värden för System.Web-adaptrar så att båda apparna kan dela en kompatibel dataskyddskonfiguration. För fullständig bakgrund om att ersätta <machineKey>, se Ersätt ASP.NET machineKey i ASP.NET Core.

Den här vägledningen bygger på nätverkskortens System.Web värdmodell så att dataskyddstjänster registreras i di-containern (host dependency injection) och görs tillgängliga i hela ASP.NET Framework-appen. Genom att integrera med värd-DI som tillhandahålls av adaptrarna kan befintliga ASP.NET Framework-komponenter lösa IDataProtectionProvider, IDataProtector och relaterade typer.

Både ASP.NET Framework-appen och ASP.NET Core-appen måste använda ett delat programnamn och en nyckellagringsplats för dataskydd så att skyddade nyttolaster kan skickas mellan appar.

  • Anropa SetApplicationName med samma logiska programnamn i båda apparna (till exempel "my-app").
  • Konfigurera PersistKeysToFileSystem för att peka på samma nyckellagringsplats som båda apparna kan läsa och skriva.

Anmärkning

Katalogen som används med PersistKeysToFileSystem är lagringsplatsen för de delade dataskyddsnycklarna. I produktion använder du ett varaktigt, delat arkiv (till exempel en UNC-resurs, Redis eller Azure Blob Storage) och följer de viktigaste riktlinjerna för hantering i Konfigurera ASP.NET Core Data Protection och översikt över ASP.NET Core Data Protection.

Konfigurera ASP.NET Framework-appen

Om du vill implementera den här konfigurationen i ASP.NET Framework-appen kontrollerar du att Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices paketet är installerat i ASP.NET Framework-appen.

När du installerar Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices-paketet i en ASP.NET Framework-app, konfigureras <machineKey> normalt automatiskt. Om <machineKey> inte finns eller om du behöver verifiera inställningarna konfigurerar du i Web.config för att använda kompatibilitetsdataskyddet enligt följande:

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

I Global.asax.cs registrerar du sedan System.Web-adaptrarnas värd och konfigurerar dataskyddet med samma applikationsnamn och nyckellagringsplatsen som ASP.NET Core-appen kommer att använda. Följande exempel är anpassat från MachineKey Framework-exemplet:

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

Den här konfigurationen:

  • Anger ett delat programnamn (my-app) som ASP.NET Core-appen också måste använda.
  • Konfigurerar en lagringsplats för delad nyckel (till exempel en UNC-resurs) som båda apparna kan komma åt.
  • Säkerställer att <machineKey> åtgärder (formulärautentisering, visningstillstånd och MachineKey.Protectrelaterade API:er) dirigeras via ASP.NET Core-dataskydd.
  • Körs som en del av ASP.NET Framework-miljön så att befintliga funktioner baserade på <machineKey> använder samma dataskyddssystemet som ASP.NET Core.

Konfigurera ASP.NET Core-appen

Ingen ytterligare konfiguration krävs för dataskydd i ASP.NET Core-appen. Konfigurera bara samma programnamn och nyckellagringsplats som ASP.NET Framework-appen använder.

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();