Delen via


Azure SignalR Service gebruiken met Azure-toepassing Gateway

Application Gateway is een load balancer voor webverkeer waarmee u verkeer naar uw webtoepassingen kunt beheren. Met Application Gateway met SignalR Service kunt u het volgende doen:

  • Bescherm uw toepassingen tegen veelvoorkomende webproblemen.
  • Zorg voor taakverdeling op toepassingsniveau voor uw schaalbare en maximaal beschikbare toepassingen.
  • End-to-end-beveiliging instellen.
  • Pas de domeinnaam aan.

Dit artikel bevat twee delen,

  • Het eerste deel laat zien hoe u Application Gateway configureert, zodat de clients toegang hebben tot SignalR via Application Gateway.
  • Het tweede deel laat zien hoe u SignalR Service beveiligt door toegangsbeheer toe te voegen aan SignalR Service en alleen verkeer van Application Gateway toe te staan.

Diagram met de architectuur van het gebruik van SignalR Service met Application Gateway.

Onbewerkte verbindingsreeks worden alleen in dit artikel weergegeven voor demonstratiedoeleinden. Beveilig uw toegangssleutels altijd in productieomgevingen. Gebruik Azure Key Vault om uw sleutels veilig te beheren en te roteren en uw verbindingsreeks te beveiligen met behulp van Microsoft Entra-id en toegang te autoriseren met Microsoft Entra ID.

Application Gateway instellen en configureren

Een SignalR Service-exemplaar maken

  • Volg het artikel en maak een SignalR Service-exemplaar ASRS1

Een Application Gateway-exemplaar maken

Maak vanuit de portal een Application Gateway-exemplaar AG1:

  • Zoek in Azure Portal naar Application Gateway en Create.

  • Gebruik deze waarden op het tabblad Basisbeginselen voor de volgende instellingen voor de toepassingsgateway :

    • Abonnement en resourcegroep en regio: hetzelfde als wat u kiest voor SignalR Service

    • Naam van toepassingsgateway: AG1

    • Virtueel netwerk, selecteer Nieuw maken en voer in het venster Virtueel netwerk maken dat wordt geopend de volgende waarden in om het virtuele netwerk en twee subnetten te maken, een voor de toepassingsgateway en een andere voor de back-endservers.

      • Naam: Voer VN1 in als naam van het virtuele netwerk.

      • Subnetten: Het subnettenraster bijwerken met minder dan 2 subnetten

        Subnetnaam Adresbereik Notitie
        myAGSubnet (adresbereik) Subnet voor de toepassingsgateway. Het subnet van de toepassingsgateway kan alleen bestaan uit toepassingsgateways. Andere resources zijn niet toegestaan.
        myBackendSubnet (een ander adresbereik) Subnet voor het Azure SignalR-exemplaar.
    • Accepteer de standaardwaarden voor de andere instellingen en selecteer vervolgens Volgende: Front-ends

  • Op het tabblad Front-ends :

    • Type front-end-IP-adres: openbaar.
    • Selecteer Nieuw toevoegen voor het openbare IP-adres en voer myAGPublicIPAddress in voor de naam van het openbare IP-adres en selecteer VERVOLGENS OK.
    • Volgende selecteren: Back-endsSchermopname van het maken van een Application Gateway-exemplaar met het tabblad Front-ends.
  • Selecteer op het tabblad Back-end een back-endpool toevoegen:

    • Naam: Voer signalr in voor de back-endpool van de SignalR Service-resource.
    • Doel van back-enddoelen: de hostnaam van uw SignalR Service-exemplaar ASRS1, bijvoorbeeldasrs1.service.signalr.net
    • Volgende selecteren: Configuratie

    Schermopname van het instellen van de back-endpool van de toepassingsgateway voor de SignalR-service.

  • Selecteer op het tabblad Configuratie een routeringsregel toevoegen in de kolom Routeringsregels:

    • Regelnaam: myRoutingRule

    • Prioriteit: 1

    • Voer in het tabblad Listener in het venster Een regel voor doorsturen toevoegen de volgende waarden in voor de listener:

      • Naam van listener: Voer myListener in als naam van de listener.
      • Front-end-IP: Selecteer Openbaar om het openbare IP-adres te kiezen dat u voor de front-end hebt gemaakt.
      • Protocol: HTTP
        • In dit artikel gebruiken we het HTTP-front-endprotocol op Application Gateway om de demo te vereenvoudigen en u op weg te helpen. Maar in werkelijkheid moet u mogelijk HTTPs en Klantdomein inschakelen met een productiescenario.
      • Accepteer de standaardwaarden voor de andere instellingen op het tabblad ListenerSchermopname van het instellen van het listenertabblad voor regelroutering voor de toepassingsgateway voor de SignalR-service.
    • Gebruik op het tabblad Back-enddoelen de volgende waarden:

      • Doeltype: Back-endpool

      • Back-enddoel: selecteer signalr die we eerder hebben gemaakt

      • Back-endinstellingen: selecteer Nieuwe toevoegen om een nieuwe instelling toe te voegen.

        • Naam van back-endinstellingen: mySetting
        • Back-endprotocol: HTTPS
        • Bekende CA-certificaat gebruiken: Ja
        • Overschrijven met nieuwe hostnaam: Ja
        • Hostnaam negeren: Hostnaam kiezen uit back-enddoel
        • Anderen behouden de standaardwaarden

        Schermopname van het instellen van de back-endinstelling van de toepassingsgateway voor de SignalR-service.

      Schermopname van het maken van back-enddoelen voor application gateway.

  • De AG1 controleren en maken Schermopname van het controleren en maken van het exemplaar van de toepassingsgateway.

Application Gateway-statustest configureren

Wanneer AG1 is gemaakt, gaat u naar het tabblad Statustests onder de sectie Instellingen in de portal, wijzigt u het pad van de statustest in /api/health

Schermopname van het instellen van de statustest voor de back-end van de toepassingsgateway voor de SignalR-service.

Snelle test

  • Probeer met een ongeldige clientaanvraag https://asrs1.service.signalr.net/client en retourneert 400 met het foutbericht 'hub' queryparameter is vereist. Dit betekent dat de aanvraag is aangekomen bij de SignalR-service en de aanvraagvalidatie heeft uitgevoerd.

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

    returns

    < HTTP/1.1 400 Bad Request
    < ...
    <
    'hub' query parameter is required.
    
  • Ga naar het tabblad Overzicht van AG1 en ontdek het openbare IP-adres van front-end

    Schermopname van het SignalR-Servicestatus-eindpunt snel testen via Application Gateway.

  • Ga naar het statuseindpunt via AG1http://<frontend-public-IP-address>/clienten retourneert ook 400 met het foutbericht 'hub' queryparameter is vereist. Dit betekent dat de aanvraag via Application Gateway naar SignalR Service is verzonden en de aanvraagvalidatie heeft uitgevoerd.

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

    returns

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

Chat uitvoeren via Application Gateway

Het verkeer kan nu SignalR Service bereiken via de Application Gateway. De klant kan het openbare IP-adres van Application Gateway of de aangepaste domeinnaam gebruiken om toegang te krijgen tot de resource. Laten we deze chattoepassing als voorbeeld gebruiken. Laten we beginnen met het lokaal uitvoeren.

Onbewerkte verbindingsreeks worden alleen in dit artikel weergegeven voor demonstratiedoeleinden. Beveilig uw toegangssleutels altijd in productieomgevingen. Gebruik Azure Key Vault om uw sleutels veilig te beheren en te roteren en uw verbindingsreeks te beveiligen met behulp van Microsoft Entra-id en toegang te autoriseren met Microsoft Entra ID.

  • Laten we eerst de verbindingsreeks van ASRS1 ophalen

    • Op het tabblad Verbindingsreeksen van ASRS1
      • Clienteindpunt: voer de URL in met behulp van het openbare IP-adres van de front-end van AG1, bijvoorbeeldhttp://20.88.8.8. Het is een verbindingsreeks generator bij het gebruik van omgekeerde proxy's en de waarde blijft niet behouden wanneer u de volgende keer terugkomt op dit tabblad. Wanneer de waarde is ingevoerd, voegt de verbindingsreeks een ClientEndpoint sectie toe.
      • De verbindingsreeks kopiëren Schermopname van het ophalen van de verbindingsreeks voor SignalR Service met clienteindpunt.
  • De GitHub-opslagplaats klonen https://github.com/aspnet/AzureSignalR-samples

  • Ga naar de map Voorbeelden/Chatroom:

  • Stel de gekopieerde verbindingsreeks in en voer de toepassing lokaal uit. U ziet dat er een ClientEndpoint sectie in ConnectionString is.

    cd samples/Chatroom
    dotnet restore
    dotnet user-secrets set Azure:SignalR:ConnectionString "<copied-connection-string-with-client-endpoint>"
    dotnet run
    
  • Open http://localhost:5000 vanuit de browser en gebruik F12 om de netwerktraceringen weer te geven. U kunt zien dat de WebSocket-verbinding tot stand is gebracht via AG1

    Schermopname van het lokaal uitvoeren van een chattoepassing met App Gateway en SignalR Service.

Secure SignalR-service

In de vorige sectie hebben we SignalR Service geconfigureerd als de back-endservice van Application Gateway, kunnen we SignalR Service rechtstreeks aanroepen vanuit een openbaar netwerk of via Application Gateway.

In deze sectie gaan we SignalR Service configureren om al het verkeer van het openbare netwerk te weigeren en alleen verkeer van Application Gateway te accepteren.

SignalR-service configureren

We gaan SignalR Service configureren om alleen privétoegang toe te staan. Meer informatie vindt u in het gebruik van een privé-eindpunt voor SignalR Service.

  • Ga naar het SignalR Service-exemplaar ASRS1 in de portal.

  • Ga naar het tabblad Netwerken :

    • Op het tabblad Openbare toegang : De toegang van het openbare netwerk wordt gewijzigd in Uitgeschakeld en Opslaan. U hebt nu geen toegang meer tot SignalR Service vanuit het openbare netwerk

      Schermopname van het uitschakelen van openbare toegang voor SignalR Service.

    • Selecteer + Privé-eindpunt op het tabblad Privétoegang:

      • Op het tabblad Basisbeginselen :
        • Naam: PE1
        • Netwerkinterfacenaam: PE1-nic
        • Regio: zorg ervoor dat u dezelfde regio kiest als uw Application Gateway
        • Volgende selecteren: Resources
      • Op het tabblad Resources
        • Standaardwaarden behouden
        • Volgende selecteren: Virtueel netwerk
      • Op het tabblad Virtueel netwerk
        • Virtueel netwerk: Selecteer eerder gemaakte VN1
        • Subnet: Selecteer eerder gemaakte VN1/myBackendSubnet
        • Anderen behouden de standaardinstellingen
        • Volgende selecteren: DNS
      • Op het tabblad DNS
        • Integratie met privé-DNS-zone: Ja
      • Het privé-eindpunt controleren en maken

Back-endpool van Application Gateway vernieuwen

Omdat Application Gateway is ingesteld voordat er een privé-eindpunt voor het gebruik was, moeten we de back-endpool vernieuwen om naar de Privé-DNS zone te kijken en erachter te komen dat het verkeer naar het privé-eindpunt moet worden gerouteerd in plaats van het openbare adres. We vernieuwen door de back-end-FQDN in te stellen op een andere waarde en deze vervolgens weer te wijzigen.

Ga naar het tabblad Back-endpools voor AG1 en selecteer signalr:

  • Stap1: Doel asrs1.service.signalr.net wijzigen in een andere waarde, bijvoorbeeld x.service.signalr.neten Opslaan selecteren
  • Stap 2: doel weer wijzigen in asrs1.service.signalr.net

Snelle test

  • Laten we nu weer eens kijken https://asrs1.service.signalr.net/client . Als openbare toegang is uitgeschakeld, wordt in plaats daarvan 403 geretourneerd.

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

    returns

    < HTTP/1.1 403 Forbidden
    
  • Ga naar het eindpunt via AG1http://<frontend-public-IP-address>/client en retourneert 400 met het foutbericht 'hub'-queryparameter is vereist. Dit betekent dat de aanvraag via application gateway naar SignalR Service is verzonden.

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

    returns

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

Als u de Chat-toepassing nu opnieuw lokaal uitvoert, ziet u foutberichten Failed to connect to .... The server returned status code '403' when status code '101' was expected., omdat openbare toegang is uitgeschakeld, zodat localhost-serververbindingen langer verbinding kunnen maken met de SignalR-service.

We gaan de chattoepassing implementeren in hetzelfde VNet met ASRS1, zodat de chat kan communiceren met ASRS1.

De chattoepassing implementeren in Azure

  • Zoek in Azure Portal naar App-services en maakeen web-app.

  • Gebruik deze waarden op het tabblad Basisinstellingen voor de volgende web-app-instellingen:

    • Abonnement en resourcegroep en regio: hetzelfde als wat u kiest voor SignalR Service
    • Naam: WA1
    • Publiceren: code
    • Runtimestack: .NET 6 (LTS)
    • Besturingssysteem: Linux
    • Regio: Zorg ervoor dat deze hetzelfde is als wat u kiest voor SignalR Service
    • Selecteer Volgende: Implementatie, behoud alles als standaard en selecteer Volgende:Netwerken
  • Op het tabblad Netwerken

    • Netwerkinjectie inschakelen: selecteer Aan
    • Virtueel netwerk: selecteer VN1 die we eerder hebben gemaakt
    • VNet-integratie inschakelen: aan
    • Uitgaand subnet: een nieuw subnet maken
    • Selecteer Controleren en maken.

We gaan nu onze chattoepassing implementeren in Azure. Onder

We gebruiken Azure CLI om onze chattoepassing te implementeren in Azure. Controleer de quickstart: Een ASP.NET-web-app implementeren voor andere implementatieomgevingen die worden geïmplementeerd in Azure.

Voer onder mapvoorbeelden/Chatroom de onderstaande opdrachten uit:

# 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

Nu de web-app is geïmplementeerd, gaan we naar de portal voor WA1 en voeren we de volgende updates uit:

  • Op het tabblad Configuratie :

    • Nieuwe toepassingsinstellingen:

      Naam Weergegeven als
      WEBSITE_DNS_SERVER 168.63.129.16
      WEBSITE_VNET_ROUTE_ALL 1
    • Nieuwe verbindingsreeks:

      Naam Weergegeven als Type
      AzureSignalRConnectionString De gekopieerde verbindingsreeks met clientendpoint-waarde Selecteer Aangepast

    Schermopname van het configureren van web-app-verbindingsreeks.

  • Op het tabblad TLS/SSL-instellingen :

    • Alleen HTTPS: uit. Ter vereenvoudiging van de demo hebben we het HTTP-front-endprotocol op Application Gateway gebruikt. Daarom moeten we deze optie uitschakelen om te voorkomen dat de HTTP-URL automatisch wordt gewijzigd in HTTPs.
  • Ga naar het tabblad Overzicht en haal de URL van WA1 op.

  • Haal de URL op en vervang schema https door http, http://wa1.azurewebsites.netopen bijvoorbeeld de URL in de browser, nu kunt u chatten. Gebruik F12 om netwerktraceringen te openen en u kunt zien dat de SignalR-verbinding tot stand is gebracht via AG1.

    Notitie

    Soms moet u de automatische https-omleiding en browsercache van de browser uitschakelen om te voorkomen dat de URL automatisch wordt omgeleid naar HTTPS.

    Schermopname van het uitvoeren van een chattoepassing in Azure met App Gateway en SignalR Service.

Volgende stappen

U hebt nu een realtime chattoepassing gebouwd met SignalR Service en Application Gateway gebruikt om uw toepassingen te beveiligen en end-to-end beveiliging in te stellen. Meer informatie over SignalR Service.