Remote-App-Einrichtung

In einigen Szenarien für inkrementelle Upgrades ist es nützlich, dass die neue ASP.NET Core-App mit der ursprünglichen ASP.NET-App kommunizieren kann.

Zurzeit wird diese Funktionalität insbesondere für Features für die Remote-App-Authentifizierung und für Remotesitzungen verwendet.

Konfiguration

Damit die ASP.NET Core-App mit der ASP.NET-App kommunizieren kann, müssen einige kleine Änderungen an jeder App vorgenommen werden.

Konfiguration der ASP.NET-App

So richten Sie die ASP.NET-App so ein, dass Anforderungen von der ASP.NET Core-App empfangen werden können:

  1. Installieren Sie das NuGet-Paket Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices.
  2. Rufen Sie die AddRemoteAppServer-Erweiterungsmethode in ISystemWebAdapterBuilder auf:
SystemWebAdapterConfiguration.AddSystemWebAdapters(this)
    .AddRemoteAppServer(options =>
    {
        // ApiKey is a string representing a GUID
        options.ApiKey = ConfigurationManager.AppSettings["RemoteAppApiKey"];
    });

In den Optionen, die von der Konfigurationsmethode an den AddRemoteAppServer-Aufruf übergeben werden, muss ein API-Schlüssel angegeben werden. Für den API-Schlüssel gilt Folgendes:

  • Er wird zum Sichern des Endpunkts verwendet, sodass nur vertrauenswürdige Aufrufer Anforderungen an ihn senden können.
  • Es handelt sich um denselben API-Schlüssel, der für die ASP.NET Core-App bereitgestellt wird, wenn sie konfiguriert wird.
  • Er ist eine Zeichenfolge und muss als GUID analysiert werden können. Bindestriche im Schlüssel sind optional.
  1. Optional: Fügen Sie das SystemWebAdapterModule-Modul zu web.config hinzu, wenn es nicht bereits von NuGet hinzugefügt wurde. Bei Verwendung von Projekten im SDK-Stil für ASP.NET Core wird das SystemWebAdapterModule-Modul nicht automatisch hinzugefügt.
  <system.webServer>
    <modules>
+      <remove name="SystemWebAdapterModule" />
+      <add name="SystemWebAdapterModule" type="Microsoft.AspNetCore.SystemWebAdapters.SystemWebAdapterModule, Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices" preCondition="managedHandler" />
    </modules>
</system.webServer>

ASP.NET Core-App

Um die ASP.NET Core-App so einzurichten, dass sie Anforderungen an die ASP.NET-App senden kann, nehmen Sie eine ähnliche Änderung vor: Sie rufen AddRemoteApp auf, nachdem System.Web-Adapterdienste mit AddSystemWebAdapters registriert wurden.

builder.Services.AddSystemWebAdapters()
    .AddRemoteAppClient(options =>
    {
        options.RemoteAppUrl = new(builder.Configuration["ReverseProxy:Clusters:fallbackCluster:Destinations:fallbackApp:Address"]);
        options.ApiKey = builder.Configuration["RemoteAppApiKey"];
    });

Für den Code oben gilt:

  • Der Aufruf von AddRemoteApp wird verwendet, um die URL und den gemeinsam genutzten geheimen API-Schlüssel der Remote-App zu konfigurieren.
  • Die Eigenschaft RemoteAppUrl gibt die URL der ASP.NET Framework-App an, mit der die ASP.NET Core-App kommuniziert. In diesem Beispiel wird die URL aus einer vorhandenen Konfigurationseinstellung gelesen, die von dem YARP-Proxy verwendet wird, der Anforderungen im Rahmen des Strangler-Fig-Musters der inkrementellen Migration an die ASP.NET Framework-App weiterleitet.

Wenn sowohl die ASP.NET- als auch die ASP.NET Core-App aktualisiert werden, können jetzt Erweiterungsmethoden verwendet werden, um die Remote-App-Authentifizierung oder eine Remotesitzung einzurichten.

Sichern der Remote-App-Verbindung

Da zu den Remote-App-Features auch das Bereitstellen von Anforderungen für neue Endpunkte aus der ASP.NET-App gehört, ist es wichtig, dass die Kommunikation mit und von der ASP.NET-App sicher ist.

Stellen Sie zunächst sicher, dass die API-Schlüsselzeichenfolge, die zum Authentifizieren der ASP.NET Core-App bei der ASP.NET-App verwendet wird, eindeutig und geheim ist. Als Best Practice empfiehlt es sich, den API-Schlüssel nicht in der Quellcodeverwaltung zu speichern. Laden Sie ihn stattdessen zur Laufzeit aus einer sicheren Quelle wie Azure Key Vault oder einer anderen sicheren Runtimekonfiguration. Um die Verwendung sicherer API-Schlüssel zu fördern, erfordern Remote-App-Verbindungen, dass es sich bei den Schlüsseln um nicht leere GUIDs (128-Bit-Hexadezimalzahlen) handeln muss.

Zweitens: Da es wichtig ist, dass die ASP.NET Core-App darauf vertrauen kann, dass sie Informationen von der richtigen ASP.NET-App anfordert, sollte die ASP.NET-App in allen Produktionsszenarien HTTPS verwenden, sodass die ASP.NET Core-App sicher sein kann, dass Antworten von einer vertrauenswürdigen Quelle bereitgestellt werden.