Share via


Verwenden von Azure SignalR Service mit Azure Application Gateway

Application Gateway ist ein Lastenausgleich für Webdatenverkehr, mit dem Sie eingehenden Datenverkehr für Ihre Webanwendungen verwalten können. Die Verwendung von Application Gateway mit SignalR Service ermöglicht Folgendes:

  • Schützen Ihrer Anwendungen vor allgemeinen Websicherheitsrisiken
  • Erhalten eines Lastenausgleichs auf Anwendungsebene für Ihre skalierbaren und hoch verfügbaren Anwendungen
  • Einrichten von End-to-End-Sicherheit
  • Anpassen des Domänennamens

Dieser Artikel ist in zwei Teile gegliedert:

  • Im ersten Teil wird gezeigt, wie Application Gateway so konfiguriert wird, dass die Clients über Application Gateway auf SignalR zugreifen können.
  • Im zweiten Teil wird gezeigt, wie Sie SignalR Service absichern, indem Sie eine Zugriffssteuerung hinzufügen und nur Datenverkehr von Application Gateway zulassen.

Diagramm: Architektur der Verwendung von SignalR Service mit Application Gateway

Einrichten und Konfigurieren von Application Gateway

Erstellen einer SignalR Service-Instanz

  • Befolgen des Artikels und Erstellen einer SignalR Service-Instanz ASRS1

Erstellen einer Application Gateway-Instanz

Erstellen Sie über das Portal eine Application Gateway-Instanz AG1:

  • Suchen Sie im Azure-Portal nach Application Gateway, und wählen Sie Erstellen aus.

  • Verwenden Sie auf der Registerkarte Grundlagen die folgenden Werte für die Einstellungen des Anwendungsgateways:

    • Abonnement, Ressourcengruppe und Region: identisch mit Ihrer Auswahl für SignalR Service

    • Name des Anwendungsgateways: AG1

    • Virtuelles Netzwerk: Wählen Sie Neu erstellen aus, und geben Sie im geöffneten Fenster Virtuelles Netzwerk erstellen die folgenden Werte ein, um das virtuelle Netzwerk und zwei Subnetze zu erstellen, eines für das Anwendungsgateway und ein weiteres für die Back-End-Server.

      • Name: Geben Sie VN1 als Namen des virtuellen Netzwerks ein.

      • Subnetze: Aktualisieren Sie das Raster Subnetze mit den beiden nachstehenden Subnetzen.

        Subnetzname Adressbereich Hinweis
        myAGSubnet (Adressbereich) Subnetz für das Anwendungsgateway. Das Subnetz für das Anwendungsgateway kann nur Anwendungsgateways enthalten. Andere Ressourcen sind nicht zulässig.
        myBackendSubnet (ein anderer Adressbereich) Subnetz für die Azure SignalR-Instanz.
    • Übernehmen Sie die Standardwerte für die übrigen Einstellungen, und wählen Sie anschließend Weiter: Front-Ends aus.

    Screenshot: Erstellen einer Application Gateway-Instanz über die Registerkarte „Grundlagen“

  • Auf der Registerkarte Front-Ends:

    • Typ der Front-End-IP-Adresse: Öffentlich.
    • Wählen Sie Neu hinzufügen für Öffentliche IP-Adresse aus, und geben Sie myAGPublicIPAddress als Namen der öffentlichen IP-Adresse ein. Wählen Sie dann OK aus.
    • Wählen Sie Weiter: Back-Ends aus.Screenshot der Erstellung einer Application Gateway-Instanz über die Registerkarte „Front-Ends“
  • Wählen Sie auf der Registerkarte Back-Ends die Option Back-End-Pool hinzufügen aus:

    • Name: Geben Sie signalr für den SignalR Service-Ressourcen-Back-End-Pool ein.
    • Back-End-Ziele unter Ziel: der Hostname Ihrer SignalR Service Instanz ASRS1, z. B. asrs1.service.signalr.net.
    • Wählen Sie Weiter: Konfiguration aus.

    Screenshot: Einrichten des Anwendungsgateway-Back-End-Pools für SignalR Service

  • Wählen Sie auf der Registerkarte Konfiguration in der Spalte Routingregeln die Option Routingregel hinzufügen aus:

    • Regelname: myRoutingRule

    • Priorität: 1

    • Geben Sie im Fenster Routingregel hinzufügen auf der Registerkarte Listener die folgenden Werte für den Listener ein:

      • Name des Listeners: Geben Sie myListener als Name für den Listener ein.
      • Front-End-IP: Wählen Sie Öffentlich aus, um die für das Front-End erstellte öffentliche IP-Adresse auszuwählen.
      • Protokoll: HTTP
        • Wir verwenden das HTTP-Front-End-Protokoll für Application Gateway in diesem Artikel, um die Demo zu vereinfachen und Ihnen den Einstieg zu erleichtern. In der Praxis müssen Sie dafür jedoch möglicherweise HTTPs und Kundendomäne im Produktionsszenario aktivieren.
      • Übernehmen Sie die Standardwerte für die übrigen Einstellungen auf der Registerkarte Listener.Screenshot: Einrichten der Registerkarte „Listener“ für die Anwendungsgateway-Routingregel für SignalR Service
    • Verwenden Sie auf der Registerkarte Back-End-Ziele die folgenden Werte:

      • Zieltyp: Back-End-Pool.

      • Back-End-Ziel: Wählen Sie das zuvor erstellte Ziel signalr aus.

      • Back-End-Einstellungen: Klicken Sie zum Hinzufügen einer neuen Einstellung auf Neu hinzufügen.

        • Name der Back-End-Einstellungen: mySetting.
        • Back-End-Protokoll: HTTPS.
        • Zertifikat einer bekannten Zertifizierungsstelle verwenden: Ja.
        • Mit neuem Hostnamen überschreiben: Ja.
        • Hostnamen außer Kraft setzen:: Hostnamen aus Back-End-Ziel auswählen.
        • Übernehmen Sie bei den übrigen Einstellungen die Standardwerte.

        Screenshot: Einrichten der Anwendungsgateway-Back-End-Einstellung für SignalR Service

      Screenshot: Erstellen von Back-End-Zielen für Anwendungsgateways

  • Überprüfen und Erstellen von AG1Screenshot: Überprüfen und Erstellen der Application Gateway-Instanz

Konfigurieren eines Application Gateway-Integritätstests

Wechseln Sie nach der Erstellung von AG1 im Portal im Abschnitt Einstellungen zur Registerkarte Integritätsüberprüfungen, und ändern Sie den Integritätstestpfad in/api/health.

Screenshot: Einrichten des Anwendungsgateway-Back-End-Integritätstests für SignalR Service

Schnelltest

  • Probieren Sie eine ungültige Clientanforderunghttps://asrs1.service.signalr.net/client aus. Diese gibt 400 mit der Fehlermeldung Abfrageparameter „hub“ erforderlich zurück. Dies bedeutet, dass die Anforderung an SignalR Service gelangt und die Anforderungsüberprüfung erfolgt ist.

    curl -v https://asrs1.service.signalr.net/client
    

    gibt zurück

    < HTTP/1.1 400 Bad Request
    < ...
    <
    'hub' query parameter is required.
    
  • Wechseln Sie zur Registerkarte „Übersicht“ von AG1, und ermitteln Sie die öffentliche Front-End-IP-Adresse.

    Screenshot: Schnelltest des SignalR Service-Integritätsendpunkts über Application Gateway

  • Besuchen Sie den Integritätsendpunkt über AG1http://<frontend-public-IP-address>/client. Auch jetzt wird 400 mit der Fehlermeldung Abfrageparameter „hub“ erforderlich zurückgegeben. Dies bedeutet, dass die Anforderung erfolgreich über Application Gateway zu SignalR Service gelangt ist und die Anforderungsüberprüfung ausgeführt wurde.

    curl -I http://<frontend-public-IP-address>/client
    

    gibt zurück

    < HTTP/1.1 400 Bad Request
    < ...
    <
    'hub' query parameter is required.
    

Ausführen von Chat über Application Gateway

Nun kann der Datenverkehr SignalR Service über Application Gateway erreichen. Der Kunde könnte die öffentliche Application Gateway-IP-Adresse oder den benutzerdefinierten Domänennamen verwenden, um auf die Ressource zuzugreifen. Verwenden wir diese Chatanwendung als Beispiel. Wir beginnen mit der lokalen Ausführung.

  • Zuerst rufen wir die Verbindungszeichenfolge von ASRS1 ab.

    • Auf der Registerkarte Verbindungszeichenfolgen von ASRS1:
      • Clientendpunkt: Geben Sie die URL unter Verwendung der öffentlichen Front-End-IP-Adresse von AG1 ein, z. B. http://20.88.8.8. Dies ist ein Verbindungszeichenfolgen-Generator bei Verwendung von Reverseproxys, und der Wert bleibt nicht erhalten, wenn Sie das nächste Mal zu dieser Registerkarte zurückkehren. Wenn ein Wert eingegeben wird, fügt die Verbindungszeichenfolge einen Abschnitt ClientEndpoint an.
      • Kopieren Sie die Verbindungszeichenfolge.Screenshot: Abrufen der Verbindungszeichenfolge für SignalR Service mit Clientendpunkt
  • Klonen Sie das GitHub-Repository https://github.com/aspnet/AzureSignalR-samples.

  • Wechseln Sie zum Ordner „samples/Chatroom“:

  • Legen Sie die kopierte Verbindungszeichenfolge fest, und führen Sie die Anwendung lokal aus. Sie sehen, dass in ConnectionString ein Abschnitt ClientEndpoint vorhanden ist.

    cd samples/Chatroom
    dotnet restore
    dotnet user-secrets set Azure:SignalR:ConnectionString "<copied-onnection-string-with-client-endpoint>"
    dotnet run
    
  • Öffnen Sie http://localhost:5000 über den Browser, und drücken Sie F12, um die Netzwerkablaufverfolgungen anzuzeigen. Sie stellen fest, dass die WebSocket-Verbindung über AG1 hergestellt wird.

    Screenshot: Lokale Ausführung der Chatanwendung mit App Gateway und SignalR Service

Absichern von SignalR Service

Im vorherigen Abschnitt haben wir SignalR Service erfolgreich als Back-End-Dienst von Application Gateway konfiguriert. Wir können SignalR Service direkt aus dem öffentlichen Netzwerk oder über Application Gateway aufrufen.

In diesem Abschnitt konfigurieren wir SignalR Service so, dass der gesamte Datenverkehr aus dem öffentlichen Netzwerk verweigert und nur Datenverkehr über Application Gateway akzeptiert wird.

Konfigurieren von SignalR Service

Konfigurieren wir SignalR Service so, dass nur der private Zugriff zulässig ist. Weitere Details finden Sie unter Verwenden eines privaten Endpunkts für SignalR Service.

  • Wechseln Sie im Portal zur SignalR Service-Instanz ASRS1.

  • Wechseln Sie zur Registerkarte Netzwerk:

    • Ändern Sie auf der Registerkarte Öffentlicher Zugriff die Option Öffentlicher Netzwerkzugriff in Deaktiviert, und klicken Sie auf Speichern. Jetzt können Sie nicht mehr über ein öffentliches Netzwerk auf SignalR Service zugreifen.

      Screenshot: Deaktivieren des öffentlichen Zugriffs für SignalR Service

    • Wählen Sie auf der Registerkarte Privater Zugriff die Option + Privater Endpunkt aus.

      • Auf der Registerkarte Grundlagen:
        • Name: PE1
        • Name der Netzwerkschnittstelle: PE1-nic
        • Region: Stellen Sie sicher, dass Sie dieselbe Region wie für Ihre Application Gateway-Instanz auswählen.
        • Wählen Sie Weiter: Ressourcen aus.
      • Auf der Registerkarte Ressourcen:
        • Behalten Sie die Standardwerte bei.
        • Wählen Sie Weiter: Virtuelles Netzwerk aus.
      • Auf der Registerkarte Virtuelles Netzwerk:
        • Virtuelles Netzwerk: Wählen Sie das zuvor erstellte VN1 aus.
        • Subnetz: Wählen Sie das zuvor erstellte VN1/myBackendSubnet aus.
        • Behalten Sie für die übrigen Optionen die Standardeinstellungen bei.
        • Klicken Sie auf Weiter: DNS
      • Auf der Registerkarte DNS:
        • Integration in private DNS-Zone: Ja
      • Überprüfen und erstellen Sie den privaten Endpunkt.

    Screenshot: Einrichten der privaten Endpunktressource für SignalR Service

Aktualisieren des Anwendungsgateway-Back-End-Pools

Da Application Gateway eingerichtet wurde, bevor ein privater Endpunkt zur Verfügung stand, müssen wir den Back-End-Pool aktualisieren, damit dieser die private DNS-Zone berücksichtigt und erkennt, dass der Datenverkehr nicht an die öffentliche Adresse, sondern an den privaten Endpunkt weitergeleitet werden soll. Wir führen die Aktualisierung durch, indem wir den Back-End-FQDN in einen beliebigen anderen Wert und dann wieder zurück ändern.

Wechseln Sie zur Registerkarte Back-End-Pools für AG1, und wählen Sie signalr aus:

  • Schritt 1: Ändern des Ziels asrs1.service.signalr.net in einen anderen Wert, z. B. x.service.signalr.net, und Auswählen von Speichern
  • Schritt2: Zurückändern des Ziels in asrs1.service.signalr.net

Schnelltest

  • Besuchen wir https://asrs1.service.signalr.net/client erneut. Wenn der öffentliche Zugriff deaktiviert ist, wird 403 zurückgegeben.

    curl -v https://asrs1.service.signalr.net/client
    

    gibt zurück

    < HTTP/1.1 403 Forbidden
    
  • Besuchen Sie den Endpunkt über AG1http://<frontend-public-IP-address>/client, und es wird 400 zurückgegeben mit der Fehlermeldung Abfrageparameter „hub“ ist erforderlich. Dies bedeutet, dass die Anforderung erfolgreich über Application Gateway zu SignalR Service gelangt ist.

    curl -I http://<frontend-public-IP-address>/client
    

    gibt zurück

    < HTTP/1.1 400 Bad Request
    < ...
    <
    'hub' query parameter is required.
    

Wenn Sie nun die Chatanwendung lokal erneut ausführen, werden die Fehlermeldungen Failed to connect to .... The server returned status code '403' when status code '101' was expected. angezeigt, da der öffentliche Zugriff deaktiviert ist, sodass localhost-Serververbindungen mit SignalR Service keine Verbindung mehr herstellen können.

Stellen wir die Chatanwendung in demselben VNet mit ASRS1 bereit, damit der Chat mit ASRS1 kommunizieren kann.

Bereitstellen der Chatanwendung in Azure

  • Suchen Sie im Azure-Portal nach App Services, und wählen Sie ErstellenWeb-App aus.

  • Verwenden Sie auf der Registerkarte Grundlagen diese Werte für die folgenden Web-App-Einstellungen:

    • Abonnement, Ressourcengruppe und Region: identisch mit Ihrer Auswahl für SignalR Service
    • Name: WA1
    • Veröffentlichen: Code
    • Runtimestapel: .NET 6 (LTS)
    • Betriebssystem: Linux
    • Region: Stellen Sie sicher, dass sie mit der für SignalR Service festgelegten Region übereinstimmt.
    • Wählen Sie Weiter: Bereitstellung aus, behalten Sie alle Standardwerte bei, und wählen Sie Weiter:Netzwerk aus.
  • Auf der Registerkarte Netzwerk:

    • Netzwerkinjektion aktivieren: Ein
    • Virtuelles Netzwerk: Wählen Sie das zuvor erstellte VN1 aus.
    • VNet-Integration aktivieren: Ein
    • Ausgehendes Subnetz: Erstellen Sie ein neues Subnetz.
    • Klicken Sie auf Überprüfen + erstellen.

Jetzt stellen wir unsere Chatanwendung in Azure bereit. Below

Sie verwenden die Azure-Befehlszeilenschnittstelle, um die Chatanwendung in Azure bereitzustellen. Im Schnellstart: Bereitstellen einer ASP.NET-Web-App finden Sie weitere Bereitstellungsumgebungen für Azure.

Führen Sie im Ordner „samples/Chatroom“ die folgenden Befehle aus:

# Build and publish the assemblies to publish folder
dotnet publish --os linux -o publish
# zip the publish folder as app.zip
cd publish
zip -r app.zip .
# use az CLI to deploy app.zip to our webapp
az login
az account set -s <your-subscription-name-used-to-create-WA1>
az webapp deploy -g <resource-group-of-WA1> -n WA1 --src-path app.zip

Nachdem die Web-App bereitgestellt wurde, wechseln wir zum Portal für WA1 und nehmen die folgenden Updates vor:

  • Auf der Registerkarte Konfiguration:

    • Neue Anwendungseinstellungen:

      Name Wert
      WEBSITE_DNS_SERVER 168.63.129.16
      WEBSITE_VNET_ROUTE_ALL 1
    • Neue Verbindungszeichenfolge:

      Name Wert type
      AzureSignalRConnectionString Die kopierte Verbindungszeichenfolge mit dem ClientEndpoint-Wert Wählen Sie Benutzerdefiniert aus.

    Screenshot: Konfigurieren der Web-App-Verbindungszeichenfolge

  • Auf der Registerkarte TLS/SSL-Einstellungen:

    • Nur HTTPS: Aus. Um die Demo zu vereinfachen, haben wir das HTTP-Front-End-Protokoll für Application Gateway verwendet. Daher müssen wir diese Option deaktivieren, um das automatische Ändern der HTTP-URL in HTTPs zu vermeiden.
  • Wechseln Sie zur Registerkarte Übersicht, und rufen Sie die URL von WA1 ab.

  • Rufen Sie die URL ab, und ersetzen Sie das https- durch ein http-Schema, z. B. http://wa1.azurewebsites.net. Öffnen Sie die URL im Browser. Jetzt können Sie mit dem Chatten beginnen! Verwenden Sie F12, um Netzwerkablaufverfolgungen zu öffnen. Sie stellen fest, dass die SignalR-Verbindung über AG1 hergestellt wird.

    Hinweis

    Manchmal müssen Sie die automatische HTTPS-Umleitung und den Cache des Browsers deaktivieren, um zu verhindern, dass die URL automatisch zu HTTPS umgeleitet wird.

    Screenshot: Ausführung der Chatanwendung in Azure mit App Gateway und SignalR Service

Nächste Schritte

Sie haben erfolgreich eine Echtzeit-Chatanwendung mit SignalR Service erstellt und Application Gateway verwendet, um Ihre Anwendungen zu schützen und End-to-End-Sicherheit einzurichten. Erfahren Sie mehr über SignalR Service.