Solucionar problemas de redirecionamento do Serviço de Aplicativo do Azure no Application Gateway

Resumo

Saiba como diagnosticar e resolver problemas de redirecionamento do Serviço de Aplicativo do Azure quando o App Service é usado como destino de back-end no Gateway de Aplicativo do Azure.

Visão geral

Neste artigo, você aprenderá a solucionar os seguintes problemas, conforme descrito em mais detalhes no Centro de Arquitetura: preservar o nome do host HTTP original entre um proxy reverso e seu aplicativo Web de back-end.

Essa lista de problemas não é exaustiva, mas aborda os problemas mais comuns que podem ocorrer quando o Gateway de Aplicativo é usado como um proxy reverso para o Serviço de Aplicativo:

  • URLs absolutas incorretas
  • URLs de redirecionamento incorretas
    • A URL do serviço de aplicativo é exposta no navegador quando há um redirecionamento. Por exemplo, um fluxo de autenticação do OIDC (OpenID Connect) é interrompido devido a um redirecionamento com o nome do host incorreto. Esse problema inclui o uso da Autenticação e Autorização do Serviço de Aplicativo.
  • Cookies desfeitos
    • Os cookies não são propagados entre o navegador e o Serviço de Aplicativo. Por exemplo, o domínio do cookie ARRAffinity do serviço de aplicativo é definido como o nome do host do App Service e está vinculado a example.azurewebsites.net, em vez do host original. Como resultado, a afinidade de sessão é interrompida.

A causa raiz desses problemas é uma configuração que substitui o nome do host usado pelo Application Gateway para se comunicar com o App Service por um nome do host diferente daquele visto pelo navegador. Geralmente, o nome do host é alterado para o domínio padrão do App Service azurewebsites.net.

Captura de tela do Application Gateway substituindo o nome do host pelo domínio azurewebsites.net do App Service.

Exemplo de configuração

Se sua configuração corresponder a uma das duas situações a seguir, sua configuração se alinhará às instruções neste artigo.

  • Selecionar nome do host do endereço de back-end está habilitado em Configurações HTTP.
  • A substituição com o nome de domínio específico é definida como um valor diferente do que a solicitação do navegador tem.

Motivo

O App Service é um serviço multilocatário, portanto, utiliza o cabeçalho host na solicitação para direcionar o pedido ao ponto de extremidade correto. O nome de domínio padrão dos Serviços de Aplicativo, *.azurewebsites.net (como contoso.azurewebsites.net), é diferente do nome de domínio do gateway de aplicativo (como contoso.com). O App Service de back-end não tem o contexto necessário para gerar URLs de redirecionamento ou cookies compatíveis com o domínio, como é visto pelo navegador.

Solução

Configure o Application Gateway e o App Service para não substituir o nome de host. Siga as instruções para "Domínio Personalizado (recomendado)" em Configurar o Serviço de Aplicativo com o Gateway de Aplicativo.

Considere recorrer à seguinte solução alternativa apenas depois de avaliar as implicações, conforme descrito em Preservar o nome original do host HTTP entre um proxy reverso e sua aplicação web de back-end (uma reescrita do cabeçalho Location, conforme descrito na próxima seção). Essas implicações incluem o potencial de cookies associados ao domínio e as URLs absolutas fora do cabeçalho de localização permanecerem quebradas.

Solução alternativa - Reescrever o cabeçalho de localização

Aviso

Essa configuração tem limitações. Examine as implicações do uso de nomes de host diferentes entre o cliente e o Gateway de Aplicativo e entre o Gateway de Aplicativo e o Serviço de Aplicativo no back-end. Para obter mais informações, consulte Preservar o nome do host HTTP original entre um proxy reverso e sua aplicação Web de back-end.

Configure o nome do host no cabeçalho Location para o nome de domínio do gateway de aplicativo. Para fazer isso, crie uma regra de reescrita com uma condição que avalia se o cabeçalho de local na resposta contém azurewebsites.net. Ele também deve executar uma ação para reescrever o cabeçalho de local para ter o nome do host do gateway de aplicativo. Para obter mais informações, confira como reescrever o cabeçalho de local.

Observação

O suporte à reescrita de cabeçalhos HTTP está disponível apenas para os SKUs Standard_v2 e WAF_v2 do Application Gateway. É recomendável migrar para a v2 para reescrita de cabeçalho e outros recursos avançados disponíveis com o SKU v2.