Como usar o Serviço do Azure SignalR com o Gateway de Aplicativo do Azure
O Gateway de Aplicativo é um balanceador de carga do tráfego da Web que permite que você gerencie o tráfego para seus aplicativos Web. O uso do Gateway de Aplicativo com o Serviço do SignalR permite que você faça o seguinte:
- Proteja seus aplicativos contra vulnerabilidades comuns da Web.
- Obtenha balanceamento de carga no nível do aplicativo para os aplicativos escalonáveis e altamente disponíveis.
- Configurar a segurança de ponta a ponta.
- Personalize o nome de domínio.
Este artigo contém duas partes,
- A primeira parte mostra como configurar o Gateway de Aplicativo para que os clientes possam acessar o SignalR pelo Gateway de Aplicativo.
- A segunda parte mostra como proteger o Serviço do SignalR adicionando o controle de acesso ao Serviço do SignalR e permitindo apenas o tráfego do Gateway de Aplicativo.
As cadeias de conexão brutas aparecem neste artigo apenas para fins de demonstração. Em ambientes de produção, sempre proteja suas chaves de acesso. Use o Azure Key Vault para gerenciar e girar suas chaves com segurança e proteger sua cadeia de conexão usando o Microsoft Entra ID.
Instalar e configurar o Gateway de Aplicativo
Criar uma instância de Serviço SignalR
- Siga o artigo e crie uma instância de Serviço do SignalR ASRS1
Criar uma instância de Gateway de Aplicativo
Crie no portal uma instância de Gateway de Aplicativo AG1:
No portal do Azure, procure Gateway de Aplicativo e selecione Criar.
Na página Básico, use estes valores para as seguintes configurações de gateway de aplicativo:
Assinatura e Grupo de recursos e Região: o mesmo que você escolhe para o Serviço do SignalR
Nome do gateway de aplicativo: AG1
Rede virtual, selecione Criar e, na janela Criar rede virtual que é aberta, insira os valores a seguir para criar a rede virtual e duas sub-redes, uma para o gateway de aplicativo e outra para os servidores de back-end.
Nome: insira VN1 para o nome da rede virtual.
Sub-redes: atualizar a grade de sub-redes com 2 sub-redes abaixo
Nome da sub-rede Intervalo de endereços Observação myAGSubnet (intervalo de endereços) Sub-rede do gateway de aplicativo. A sub-rede de gateway de aplicativo pode conter apenas gateways de aplicativo. Nenhum outro recurso é permitido. myBackendSubnet (outro intervalo de endereços) Sub-rede da instância de SignalR do Azure.
Aceite os valores padrão para as outras configurações e selecione Avançar: Front-ends
Na guia Front-ends:
- Tipo de endereço IP de front-end: público.
- Selecione Adicionar novo para o Endereço IP público, insira myAGPublicIPAddress para o nome do endereço IP público e clique em OK.
- Selecione Próximo: Back-ends
Na guia Back-ends, selecione Adicionar um pool de back-end:
- Nome: insira signalr para o pool de back-end do recurso do Serviço do SignalR.
- Destino dos destinos de back-end: o nome do host da instância de Serviço do SignalR ASRS1, por exemplo
asrs1.service.signalr.net
- Clique em Avançar: configuração
Na guia Configuração, selecione Adicionar uma regra de roteamento na coluna Regras de roteamento:
Nome da regra: myRoutingRule
Prioridade: 1
Na guia Ouvinte na janela Adicionar uma regra de roteamento, insira os seguintes valores para o ouvinte:
- Nome do ouvinte: insira myListener para o nome do ouvinte.
- IP de front-end: selecione Público para escolher o IP público que você criou para o front-end.
- Protocolo: HTTP
- O protocolo de front-end HTTP no Gateway de Aplicativo é usado neste artigo para simplificar a demonstração e ajudá-lo a começar a começar com mais facilidade. Mas, na realidade, talvez seja necessário habilitar HTTPs e Domínio do Cliente com o cenário de produção.
- Aceite os valores padrão para as outras configurações na guia Ouvinte
Na guia Destinos de back-end, use os seguintes valores:
Tipo de destino: pool de back-end
Destino de back-end: selecione signalr criado anteriormente
Configurações de back-end: selecione Adicionar nova para adicionar uma nova configuração.
- Nome das configurações de back-end: mySetting
- Protocolo de back-end: HTTPS
- Usar um Certificado de Autoridade de Certificação conhecido: sim
- Substituir por um novo nome do host: sim
- Substituição do nome do host: escolher nome do host do destino de back-end
- Os outros mantêm os valores padrão
Revisar e criar a AG1
Configurar a investigação de integridade do Gateway de Aplicativo
Quando AG1 for criado, acesse a guia Investigações de integridade na seção Configurações no portal, altere o caminho da investigação de integridade para /api/health
Teste rápido
Tente com uma solicitação
https://asrs1.service.signalr.net/client
de cliente inválida e 400 será retornado com a mensagem de erro o parâmetro de consulta "hub" é necessário. Isso significa que a solicitação chegou ao Serviço do SignalR e fez a validação da solicitação.curl -v https://asrs1.service.signalr.net/client
returns
< HTTP/1.1 400 Bad Request < ... < 'hub' query parameter is required.
Acesse a guia Visão geral do AG1 e descubra o endereço IP público de front-end
Visite o ponto de extremidade de integridade por meio do AG1
http://<frontend-public-IP-address>/client
e também retorna 400 com a mensagem de erro o parâmetro de consulta de "hub" é necessário. Isso significa que a solicitação passou com êxito pelo Gateway de Aplicativo para o Serviço do SignalR e fez a validação da solicitação.curl -I http://<frontend-public-IP-address>/client
returns
< HTTP/1.1 400 Bad Request < ... < 'hub' query parameter is required.
Executar o chat pelo Gateway de Aplicativo
Agora, o tráfego pode alcançar Serviço do SignalR pelo Gateway de Aplicativo. O cliente pode usar o endereço IP público ou o nome de domínio personalizado do Gateway de Aplicativo para acessar o recurso. Esse aplicativo de chat será usado como exemplo. Vamos começar executando-o localmente.
As cadeias de conexão brutas aparecem neste artigo apenas para fins de demonstração. Em ambientes de produção, sempre proteja suas chaves de acesso. Use o Azure Key Vault para gerenciar e girar suas chaves com segurança e proteger sua cadeia de conexão usando o Microsoft Entra ID.
Primeiro, vamos obter a cadeia de conexão de ASRS1
- Na guia Cadeias de conexão do ASRS1
- Ponto de extremidade do cliente: insira a URL usando o endereço IP público de front-end do AG1, por exemplo
http://20.88.8.8
. Ele é um gerador de cadeia de conexão ao usar proxies reversos e o valor não é preservado quando você volta para essa guia. Quando o valor é inserido, a cadeia de conexão acrescenta uma seçãoClientEndpoint
. - Copie a cadeia de Conexão
- Ponto de extremidade do cliente: insira a URL usando o endereço IP público de front-end do AG1, por exemplo
- Na guia Cadeias de conexão do ASRS1
Clone o repositório GitHub https://github.com/aspnet/AzureSignalR-samples
Acesse a pasta Sala de chat/amostras:
Defina a cadeia de conexão copiada e execute o aplicativo localmente. Você pode ver que há uma seção
ClientEndpoint
no ConnectionString.cd samples/Chatroom dotnet restore dotnet user-secrets set Azure:SignalR:ConnectionString "<copied-connection-string-with-client-endpoint>" dotnet run
Abra http://localhost:5000 do navegador e use F12 para exibir os rastreamentos de rede. Você pode ver que a conexão WebSocket é estabelecida pelo AG1
Proteger o Serviço do SignalR
Na seção anterior, configuramos com êxito o Serviço do SignalR como o serviço de back-end do Gateway de Aplicativo, podemos chamar o Serviço do SignalR diretamente da rede pública ou por meio do Gateway de Aplicativo.
Nesta seção, vamos configurar o Serviço do SignalR para negar todo o tráfego da rede pública e aceitar apenas o tráfego do Gateway de Aplicativo.
Configurar o Serviço do SignalR
Vamos configurar o Serviço do SignalR para permitir apenas o acesso privado. Você pode encontrar mais detalhes no uso do ponto de extremidade privado para o Serviço do SignalR.
Vá para a instância de Serviço do SignalR ASRS1 no portal.
Acesse a guia Rede:
Na guia Acesso público: altere Acesso à rede pública para Desabilitado e clique em Salvar. Agora não é mais possível acessar o Serviço do SignalR da rede pública
Na guia Acesso privado, selecione + Ponto de extremidade privado:
- Na guia Básico:
- Nome: PE1
- Nome da Interface de Rede: PE1-nic
- Região: escolha a mesma região que o Gateway de Aplicativo
- Selecione Avançar : Recursos
- Na guia Recursos
- Manter os valores padrão
- Selecione Avançar: Rede Virtual
- Na guia Rede Virtual
- Rede virtual: selecione a VN1 criada anteriormente
- Sub-rede: selecione VN1/myBackendSubnet criado anteriormente
- Os outros mantêm as configurações padrão
- Selecione Avançar: DNS
- Na guia DNS
- Integração com a zona DNS privada: sim
- Revisar e criar o ponto de extremidade privado
- Na guia Básico:
Atualizar o pool de back-end do Gateway de Aplicativo
Como o Gateway de Aplicativo foi configurado antes de haver um ponto de extremidade privado para ser usado, precisamos atualizar o pool de back-end para que ele examine a Zona de DNS privado e descubra que ele deve rotear o tráfego para o ponto de extremidade privado em vez do endereço público. A atualização é feita definindo o FQDN de back-end como outro valor e, em seguida, alterando-o novamente.
Acesse a guia Pools de back-end para AG1 e selecione signalr:
- Etapa1: alterar o Destino
asrs1.service.signalr.net
para outro valor, por exemplo,x.service.signalr.net
e selecionar Salvar - Etapa2: alterar o Destino para
asrs1.service.signalr.net
novamente
Teste rápido
Agora vamos visitar
https://asrs1.service.signalr.net/client
de novo. Com o acesso público desabilitado, ele retorna 403.curl -v https://asrs1.service.signalr.net/client
returns
< HTTP/1.1 403 Forbidden
Visite o ponto de extremidade pelo AG1
http://<frontend-public-IP-address>/client
e retorna 400 com a mensagem de erro o parâmetro de consulta de "hub" é necessário. Isso significa que a solicitação passou com êxito pelo Gateway de Aplicativo para o Serviço do SignalR.curl -I http://<frontend-public-IP-address>/client
returns
< HTTP/1.1 400 Bad Request < ... < 'hub' query parameter is required.
Agora, se você executar o aplicativo de chat localmente novamente, verá mensagens de erro Failed to connect to .... The server returned status code '403' when status code '101' was expected.
, pois o acesso público está desabilitado para que as conexões de servidor localhost sejam mais capazes de se conectar ao serviço do SignalR.
Vamos implantar o aplicativo de chat na mesma VNet com ASRS1 para que o chat possa conversar com o ASRS1.
Implantar o aplicativo de chat no Azure
No portal do Azure, pesquise serviços de aplicativo e CriarAplicativo Web.
Na guia Noções básicas, use esses valores para as seguintes configurações de aplicativos web:
- Assinatura e Grupo de recursos e Região: o mesmo que você escolhe para o Serviço do SignalR
- Nome: WA1
- Publicar: código
- Pilha de runtime: .NET 6 (LTS)
- Sistema Operacional: Linux
- Região: verifique se é a mesma escolhida para o Serviço do SignalR
- Selecione Próximo: Implantação, mantenha tudo como padrão e selecione Próximo: Rede
Na guia Rede
- Habilitar injeção de rede: selecione Ativada
- Rede Virtual: selecione a VN1 criada anteriormente
- Habilitar a Integração de VNet: ativada
- Sub-rede de saída: crie uma sub-rede
- Selecione Examinar + criar
Agora vamos implantar o aplicativo de chat no Azure. Below
Usamos a CLI do Azure para implantar nosso aplicativo de chat no Azure. Confira Início Rápido: Implantar um aplicativo web do ASP.NET para outros ambientes de implantação que estão sendo implantados no Azure.
Em exemplos de pasta/sala de chat, execute os comandos abaixo:
# 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
Agora que o aplicativo Web foi implantado, vamos para o portal para WA1 e fazer as seguintes atualizações:
Na guia Configuração:
Novas configurações de aplicativo:
Nome Valor WEBSITE_DNS_SERVER 168.63.129.16 WEBSITE_VNET_ROUTE_ALL 1 Nova cadeia de conexão:
Nome Valor Tipo ConnectionString do AzureSignalR A cadeia de conexão copiada com o valor ClientEndpoint selecione Personalizado
Na guia Configurações do TLS/SSL:
- Somente HTTPS: desativado. Para simplificar a demonstração, usamos o protocolo de front-end HTTP no Gateway de Aplicativo. Portanto, precisamos desativar essa opção para evitar alterar a URL HTTP para HTTPs automaticamente.
Acesse a guia Visão geral e obtenha a URL do WA1.
Obtenha a URL e substitua o esquema https por http, por exemplo,
http://wa1.azurewebsites.net
, abra a URL no navegador, agora você pode começar a conversar! Use F12 para abrir rastreamentos de rede e é possível ver que a conexão do SignalR é estabelecida por meio do AG1.Observação
Às vezes, é necessário desabilitar o redirecionamento automático de https do navegador e o cache do navegador para impedir que a URL redirecione para HTTPS automaticamente.
Próximas etapas
Você criou com êxito um aplicativo de chat em tempo real com o Serviço do SignalR e usou o Gateway de Aplicativo para proteger seus aplicativos e configurar a segurança de ponta a ponta. Saiba mais sobre o Serviço do SignalR.