Share via


Como usar o Serviço Azure SignalR com o Azure Application Gateway

O Application Gateway é um balanceador de carga de tráfego da Web que permite gerenciar o tráfego para seus aplicativos Web. O uso do Application Gateway com o Serviço SignalR permite que você faça o seguinte:

  • Proteja as suas aplicações de vulnerabilidades comuns da Web.
  • Obtenha balanceamento de carga no nível do aplicativo para seus aplicativos escaláveis e altamente disponíveis.
  • Configure 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 Application Gateway para que os clientes possam acessar o SignalR por meio do Application Gateway.
  • A segunda parte mostra como proteger o Serviço SignalR adicionando controle de acesso ao Serviço SignalR e permitir apenas o tráfego do Application Gateway.

Diagrama que mostra a arquitetura do uso do Serviço SignalR com o Application Gateway.

Definir e configurar o Gateway de Aplicação

Criar uma instância do Serviço SignalR

  • Siga o artigo e crie uma instância do Serviço SignalR ASRS1

Criar uma instância do Application Gateway

Crie a partir do portal uma instância AG1 do Application Gateway:

  • No portal do Azure, procure Gateway de Aplicativo e Criar.

  • Na guia Noções básicas, use esses valores para as seguintes configurações de gateway de aplicativo:

    • Grupo de Assinatura e Recursos e Região: o mesmo que você escolhe para o Serviço SignalR

    • Nome do gateway do aplicativo: AG1

    • Rede virtual, selecione Criar novo e, na janela Criar rede virtual que se abre, insira os seguintes valores para criar a rede virtual e duas sub-redes, uma para o gateway de aplicativo e outra para os servidores back-end.

      • Nome: Digite VN1 para o nome da rede virtual.

      • Sub-redes: Atualize a grade Sub-redes com menos de 2 sub-redes

        Nome da sub-rede Intervalo de endereços Nota
        myAGSubnet (intervalo de endereços) Sub-rede para o gateway de aplicativo. A sub-rede do gateway de aplicativo pode conter apenas gateways de aplicativo. Não são permitidos outros recursos.
        myBackendSubnet (outro intervalo de endereços) Sub-rede para a instância do Azure SignalR.
    • Aceite os valores padrão para as outras configurações e selecione Next: Frontends

    Captura de tela da criação da instância do Application Gateway com a guia Noções básicas.

  • Na guia Frontends:

    • Tipo de endereço IP frontend: Público.
    • Selecione Adicionar novo para o endereço IP público e digite myAGPublicIPAddress para o nome do endereço IP público e, em seguida, selecione OK.
    • Selecione Next: BackendsCaptura de tela da criação da instância do Application Gateway com a guia Frontends.
  • Na guia Back-ends, selecione Adicionar um pool de back-ends:

    • Nome: insira signalr para o pool de back-end de recursos do Serviço SignalR.
    • Destinos de back-end Destino: o nome do host da instância do Serviço SignalR ASRS1, por exemplo asrs1.service.signalr.net
    • Selecione Next: Configuração

    Captura de tela da configuração do pool de back-end do gateway de aplicativo para o Serviço 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: digite myListener para o nome do ouvinte.
      • IP Frontend: Selecione Público para escolher o IP público que você criou para o frontend.
      • Protocolo: HTTP
        • Usamos o protocolo frontend HTTP no Application Gateway neste artigo para simplificar a demonstração e ajudá-lo a começar mais facilmente. Mas, na realidade, você pode precisar habilitar HTTPs e Customer Domain nele com cenário de produção.
      • Aceite os valores padrão para as outras configurações na guia OuvinteCaptura de tela da configuração da guia ouvinte da regra de roteamento do gateway de aplicativo para o Serviço SignalR.
    • Na guia Destinos de back-end , use os seguintes valores:

      • Tipo de destino: Pool de back-end

      • Alvo de back-end: selecione o sinalizador que criamos anteriormente

      • Configurações de back-end: selecione Adicionar novo para adicionar uma nova configuração.

        • Nome das configurações de back-end: mySetting
        • Protocolo de back-end: HTTPS
        • Usar certificado de autoridade de certificação bem conhecido: Sim
        • Substituir por novo nome de host: Sim
        • Substituição do nome do host: escolha o nome do host do destino de back-end
        • Outros mantêm os valores padrão

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

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

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

Configurar a sonda de integridade do Application Gateway

Quando o AG1 for criado, vá para a guia Sondas de integridade na seção Configurações no portal, altere o caminho da sonda de integridade para /api/health

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

Teste rápido

  • Tente com uma solicitação https://asrs1.service.signalr.net/client de cliente inválida e retorna 400 com mensagem de erro 'hub' parâmetro de consulta é necessário. Isso significa que a solicitação chegou ao Serviço SignalR e fez a validação da solicitação.

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

    devoluções

    < HTTP/1.1 400 Bad Request
    < ...
    <
    'hub' query parameter is required.
    
  • Vá para a guia Visão geral do AG1 e descubra o endereço IP público do Frontend

    Captura de tela do ponto de extremidade de integridade do Serviço SignalR de teste rápido por meio do Application Gateway.

  • Visite o ponto de extremidade de integridade através do AG1http://<frontend-public-IP-address>/client e ele também retorna 400 com a mensagem de erro 'hub' parâmetro de consulta é necessário. Isso significa que a solicitação passou com êxito pelo Application Gateway para o Serviço SignalR e fez a validação da solicitação.

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

    devoluções

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

Execute o bate-papo por meio do Application Gateway

Agora, o tráfego pode chegar ao Serviço SignalR através do Application Gateway. O cliente pode usar o endereço IP público do Application Gateway ou o nome de domínio personalizado para acessar o recurso. Vamos usar este aplicativo de bate-papo como exemplo. Vamos começar por executá-lo localmente.

  • Primeiro, vamos obter a cadeia de conexão do ASRS1

    • Na guia Cadeias de conexão do ASRS1
      • Ponto de extremidade do cliente: insira a URL usando o endereço IP público frontend do AG1, por exemplo http://20.88.8.8. É um gerador de cadeia de conexão ao usar proxies reversos e o valor não é preservado na próxima vez que você voltar a essa guia. Quando o valor é inserido, a cadeia de conexão acrescenta uma ClientEndpoint seção.
      • Copie a cadeia de conexão Captura de tela mostrando como obter a cadeia de conexão para o Serviço SignalR com o ponto de extremidade do cliente.
  • Clone o repositório GitHub https://github.com/aspnet/AzureSignalR-samples

  • Vá para a pasta samples/Chatroom:

  • Defina a cadeia de conexão copiada e execute o aplicativo localmente, você pode ver que há uma ClientEndpoint seção no ConnectionString.

    cd samples/Chatroom
    dotnet restore
    dotnet user-secrets set Azure:SignalR:ConnectionString "<copied-onnection-string-with-client-endpoint>"
    dotnet run
    
  • Abra http://localhost:5000 a partir do navegador e use F12 para visualizar os rastreamentos de rede, você pode ver que a conexão WebSocket é estabelecida através de AG1

    Captura de tela da execução do aplicativo de bate-papo localmente com o App Gateway e o Serviço SignalR.

Serviço Secure SignalR

Na seção anterior, configuramos com êxito o Serviço SignalR como o serviço de back-end do Application Gateway, podemos chamar o Serviço SignalR diretamente da rede pública ou através do Application Gateway.

Nesta seção, vamos configurar o Serviço SignalR para negar todo o tráfego da rede pública e aceitar apenas o tráfego do Application Gateway.

Configurar o serviço SignalR

Vamos configurar o Serviço SignalR para permitir apenas acesso privado. Você pode encontrar mais detalhes em Usar ponto de extremidade privado para o Serviço SignalR.

  • Vá para a instância do Serviço SignalR ASRS1 no portal.

  • Vá para a guia Rede :

    • Na guia Acesso público: Acesso à rede pública muda para Desabilitado e Salvar, agora você não pode mais acessar o Serviço SignalR da rede pública

      Captura de ecrã a mostrar a desativação do acesso público para o Serviço SignalR.

    • Na guia Acesso privado , selecione + Ponto de extremidade privado:

      • Na guia Noções básicas :
        • Designação: PE1
        • Nome da interface de rede: PE1-nic
        • Região: certifique-se de escolher a mesma região do seu Application Gateway
        • Selecione Seguinte: Recursos
      • Na guia Recursos
        • Manter valores padrão
        • Selecione Next: Rede Virtual
      • No separador Rede Virtual
        • Rede virtual: Selecione VN1 criada anteriormente
        • Sub-rede: Selecione VN1/myBackendSubnet criada anteriormente
        • Outros mantêm as configurações padrão
        • Selecione Next: DNS
      • No separador DNS
        • Integração com zona DNS privada: Sim
      • Revisar e criar o ponto de extremidade privado

    Captura de tela da configuração do recurso de ponto de extremidade privado para o Serviço SignalR.

Atualizar pool de back-end do Application Gateway

Como o Application Gateway foi configurado antes de haver um ponto de extremidade privado para ele usar, precisamos atualizar o pool de back-end para que ele examine a Zona DNS Privada e descubra se ele deve rotear o tráfego para o ponto de extremidade privado em vez do endereço público. Fazemos a atualização definindo o FQDN de back-end para algum outro valor e, em seguida, alterando-o novamente.

Vá para a guia Pools de back-end para AG1 e selecione signalr:

  • Etapa 1: altere Target para algum outro valor, por exemplo, x.service.signalr.nete selecione Salvar asrs1.service.signalr.net
  • Passo 2: alterar o destino de volta para asrs1.service.signalr.net

Teste rápido

  • Agora vamos visitar https://asrs1.service.signalr.net/client novamente. Com o acesso público desativado, ele retorna 403 em vez disso.

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

    devoluções

    < HTTP/1.1 403 Forbidden
    
  • Visite o ponto de extremidade através do AG1http://<frontend-public-IP-address>/client e ele retorna 400 com a mensagem de erro 'hub' parâmetro de consulta é necessário. Isso significa que a solicitação passou com êxito pelo Application Gateway para o Serviço SignalR.

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

    devoluções

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

Agora, se você executar o aplicativo de bate-papo localmente novamente, verá mensagens Failed to connect to .... The server returned status code '403' when status code '101' was expected.de erro, é porque o acesso público está desativado para que as conexões do servidor localhost possam se conectar mais tempo ao serviço SignalR.

Vamos implantar o aplicativo de bate-papo na mesma VNet com ASRS1 para que o bate-papo possa falar com ASRS1.

Implantar o aplicativo de chat no Azure

  • No portal do Azure, procure Serviços de aplicativo e Criaraplicativo Web.

  • Na guia Noções básicas, use estes valores para as seguintes configurações do aplicativo Web:

    • Grupo de Assinatura e Recursos e Região: o mesmo que você escolhe para o Serviço SignalR
    • Designação: WA1
    • Publicar: Código
    • Pilha de tempo de execução: .NET 6 (LTS)
    • Sistema Operacional: Linux
    • Região: Certifique-se de que é o mesmo que você escolhe para o Serviço SignalR
    • Selecione Next: Deployment, mantenha tudo como padrão e selecione Next:Networking
  • Na guia Rede

    • Ativar injeção de rede: selecione Ativado
    • Rede Virtual: selecione VN1 que criamos anteriormente
    • Habilite a integração de VNet: Ativado
    • Sub-rede de saída: crie uma nova sub-rede
    • Selecione Rever + criar

Agora vamos implantar nosso aplicativo de chat no Azure. Abaixo

Usamos a CLI do Azure para implantar nosso aplicativo de chat no Azure. Verifique Guia de início rápido: implante um aplicativo Web ASP.NET para outros ambientes de implantação 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 está implantado, vamos para o portal do WA1 e fazer as seguintes atualizações:

  • Na guia Configuração:

    • Novas configurações do aplicativo:

      Nome Valor
      WEBSITE_DNS_SERVER 168.63.129.16
      WEBSITE_VNET_ROUTE_ALL 1
    • Nova cadeia de conexão:

      Nome Valor Type
      AzureSignalRConnectionString A cadeia de conexão copiada com o valor ClientEndpoint selecione Personalizado

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

  • Na guia Configurações de TLS/SSL:

    • Somente HTTPS: Desativado. Para simplificar a demonstração, usamos o protocolo HTTP frontend no Application Gateway. Portanto, precisamos desativar essa opção para evitar alterar a URL HTTP para HTTPs automaticamente.
  • Vá para a guia Visão geral e obtenha o URL do WA1.

  • Obter o URL, e substituir esquema https por http, por exemplo, http://wa1.azurewebsites.netabra o URL no navegador, agora você pode começar a conversar! Use F12 para abrir rastreamentos de rede, e você pode ver que a conexão SignalR é estabelecida através de AG1.

    Nota

    Às vezes, você precisa desativar o redirecionamento automático https do navegador e o cache do navegador para evitar que o URL redirecione para HTTPS automaticamente.

    Captura de ecrã da execução da aplicação de chat no Azure com o App Gateway e o Serviço SignalR.

Próximos passos

Agora, você criou com sucesso um aplicativo de bate-papo em tempo real com o Serviço SignalR e usou o Application Gateway para proteger seus aplicativos e configurar a segurança de ponta a ponta. Saiba mais sobre o Serviço SignalR.