Condividi tramite


Eseguire la migrazione di ASP.NET machineKey usando gli adattatori System.Web

Annotazioni

In questo modo si usano gli adapter System.Web per semplificare la migrazione.

Nell'app ASP.NET Framework configurare <machineKey> e l'host degli adattatori System.Web in modo che entrambe le app possano condividere una configurazione compatibile per la protezione dei dati. Per informazioni generali sulla sostituzione di <machineKey>, vedere Sostituire la chiave macchina di ASP.NET in ASP.NET Core.

Queste linee guida si basano sul System.Web modello di hosting degli adattatori in modo che i servizi di protezione dei dati vengano registrati nel contenitore DI dell'host e resi disponibili in tutta l'app ASP.NET Framework. Integrando con l'host DI fornito dagli adattatori, i componenti esistenti di ASP.NET Framework possono risolvere IDataProtectionProvider, IDataProtector e tipi correlati.

Sia l'app ASP.NET Framework che l'app ASP.NET Core devono usare un nome dell'applicazione condivisa e un repository di chiavi per la protezione dei dati in modo che i payload protetti possano eseguire il round trip tra le app.

  • Chiamare SetApplicationName con lo stesso nome di applicazione logica in entrambe le app (ad esempio, "my-app").
  • Configurare PersistKeysToFileSystem per puntare alla stessa posizione del repository delle chiavi che entrambe le app possono leggere e scrivere.

Annotazioni

La directory usata con PersistKeysToFileSystem è l'archivio di backup per le chiavi di protezione dei dati condivise. Nell'ambiente di produzione, usare un archivio condiviso durevole(ad esempio una condivisione UNC, Redis o Archiviazione BLOB di Azure) e seguire le indicazioni sulla gestione delle chiavi in Configurare ASP.NET Protezione dei dati di base e ASP.NET Panoramica della protezione dei dati di base.

Configurare l'app ASP.NET Framework

Per implementare questa configurazione nell'app ASP.NET Framework, assicurarsi che il Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices pacchetto sia installato nell'app ASP.NET Framework.

Quando si installa il Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices pacchetto nell'app ASP.NET Framework, viene in genere configurato <machineKey> automaticamente. Se <machineKey> non è presente o è necessario verificare le impostazioni, configurare '' in Web.config per utilizzare il data protector compatibile come illustrato di seguito:

<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.cs Quindi, registrare l'host System.Web adapters e configurare la protezione dei dati utilizzando lo stesso nome dell'applicazione e lo stesso repository di chiavi che verranno usati dall'app ASP.NET Core. L'esempio seguente è stato adattato dall'esempio MachineKey Framework:

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

Questa configurazione:

  • Imposta un nome dell'applicazione condivisa (my-app) che deve essere usata anche dall'app ASP.NET Core.
  • Configura un repository di chiavi condivise ,ad esempio una condivisione UNC, a cui entrambe le app possono accedere.
  • Garantisce che le operazioni <machineKey> (autenticazione dei moduli, stato di visualizzazione, MachineKey.Protect e API correlate) siano instradate tramite la protezione dei dati di ASP.NET Core.
  • Viene eseguito come parte dell'host del framework ASP.NET in modo che le funzionalità basate su <machineKey> esistenti utilizzino lo stesso sistema di protezione dei dati di ASP.NET Core.

Configurare l'app ASP.NET Core

Non è necessaria alcuna configurazione aggiuntiva per la protezione dei dati nell'app ASP.NET Core. È sufficiente configurare lo stesso nome dell'applicazione e lo stesso percorso di archiviazione delle chiavi usato dall'app ASP.NET Framework.

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