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.
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-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, bijvoorbeeld
asrs1.service.signalr.net
- Volgende selecteren: Configuratie
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 Listener
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
De AG1 controleren en maken
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
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
Ga naar het statuseindpunt via AG1
http://<frontend-public-IP-address>/client
en 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, bijvoorbeeld
http://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 eenClientEndpoint
sectie toe. - De verbindingsreeks kopiëren
-
Clienteindpunt: voer de URL in met behulp van het openbare IP-adres van de front-end van AG1, bijvoorbeeld
- Op het tabblad Verbindingsreeksen van ASRS1
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
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
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
- Op het tabblad Basisbeginselen :
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, bijvoorbeeldx.service.signalr.net
en 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 AG1
http://<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
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.net
open 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.
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.