Compartilhar via


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.

Diagrama mostrando a arquitetura de uso do Serviço do SignalR com o 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-endsCaptura de tela da criação da instância do Gateway de Aplicativo com a guia Frontends.
  • 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

    Captura de tela da configuração do pool de back-end do gateway de aplicativo para o Serviço do SignalR.

  • 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 Captura de tela da configuração da guia do ouvinte de regras de roteamento do gateway do aplicativo para o Serviço do SignalR.
    • 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

        Captura de tela da configuração do back-end do gateway de aplicativo para o Serviço do SignalR.

      Captura de tela de criação de destinos de back-end para gateway de aplicativo.

  • Revisar e criar a AG1Captura de tela da revisão e criação da instância de gateway de aplicativo.

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

Captura de tela da investigação de integridade do back-end do gateway de aplicativo para o Serviço do SignalR.

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

    Captura de tela do ponto de extremidade de integridade do Serviço do SignalR de teste rápido através do Gateway de Aplicativo.

  • Visite o ponto de extremidade de integridade por meio do AG1http://<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ção ClientEndpoint.
      • Copie a cadeia de Conexão Captura de tela da obtenção da cadeia de conexão do Serviço do SignalR com ponto de extremidade do cliente.
  • 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

    Captura de tela do aplicativo de chat em execução localmente com o Gateway de Aplicativo e o Serviço do SignalR.

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

      Captura de tela de desabilitação do acesso público ao Serviço do SignalR.

    • 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

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 AG1http://<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

    Captura de tela de configuração da cadeia de conexão de aplicativos Web.

  • 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.

    Captura de tela do aplicativo de chat em execução no Azure com o Gateway de Aplicativo e o Serviço do SignalR.

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.