Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Solução] Erro IDX20804 (Kaspersky/Antivírus) com Azure Entra ID no Projeto VollMed - Resolvido com Docker

Fala, pessoal! Durante a Aula "04. Autenticação e Autorização" (Azure Entra ID) Atividade "12 Testando o fluxo de autenticação", enfrentei um erro de conexão bloqueada ao tentar fazer o login da Microsoft acessando https://localhost:5001/Medicos. Depois de muitos testes, documentei aqui o problema e a solução completa para caso alguém passe pela mesma situação.

O Problema / Erro Principal

Ao tentar autenticar o projeto no Entra ID, a aplicação quebrava com uma série de exceções de Sockets e SSL, culminando neste erro:

SocketException: Uma conexão estabelecida foi anulada pelo software no computador host.

HttpRequestException: The SSL connection could not be established, see inner exception.

IOException: IDX20804: Unable to retrieve document from: 'https://login.microsoftonline.com/d3a8b901.../.well-known/openid-configuration'.

Por que isso acontece?
Alguns antivírus (como o Kaspersky, FortiClient, etc.) interceptam o tráfego de rede para escanear conexões HTTPS. Ao fazer isso, eles trocam o certificado SSL original da Microsoft pelo certificado do próprio antivírus. O .NET percebe essa "invasão", considera a conexão insegura e derruba a requisição.

Tentativas que NÃO funcionaram

Antes de chegar à solução real, tentei várias coisas (que não resolveram):

  • Acessar a URL do erro pelo navegador (funcionava normalmente, o problema era só no .NET).
  • Adicionar o dotnet.exe e o VollMed.Web.exe como aplicativos confiáveis no Kaspersky.
  • Desmarcar "Injetar JS no tráfego da Web" e "Não verificar conexões criptografadas" na rede do antivírus.
  • Desativar o antivírus completamente (pasmem, às vezes o serviço de rede deles continua rodando em segundo plano).
  • Alterar versões de HTTP/TLS no código e tentar forçar o bypass de erros SSL no HttpClient.

A Solução Definitiva (Isolamento com Docker)

Para fugir do bloqueio de rede do host (Windows + Antivírus), a melhor arquitetura é rodar os projetos isolados usando Docker e Docker Compose, fazendo eles conversarem por uma rede interna.

Passo 1: Criar o Docker Compose

Adicione o suporte a orquestrador de contêineres na Solution para criar o arquivo docker-compose.yaml conectando o Front e o Back:

version: '3.4'

services:
  vollmed.web:
    image: ${DOCKER_REGISTRY-}vollmedweb
    build:
      context: .
      dockerfile: VollMed.Web/Dockerfile
    ports:
      - "5000:5000" # Porta HTTP
      - "5001:5001" # Porta HTTPS (Usada no Portal do Azure)
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:5001;http://+:5000

  vollmed.webapi:
    image: ${DOCKER_REGISTRY-}vollmedwebapi
    build:
      context: .
      dockerfile: VollMed.WebApi/Dockerfile
    ports:
      - "6000:6000" 
      - "6001:6001" 
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:6001;http://+:6000

Passo 2: Ajustar o launchSettings.json

Em ambos os projetos (Web e WebApi), configure o perfil do Docker para mapear as portas corretamente e impedir portas aleatórias. Exemplo do projeto Web:

"Container (Dockerfile)": {
  "commandName": "Docker",
  "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
  "environmentVariables": {
    "ASPNETCORE_URLS": "https://+:5001;http://+:5000"
  },
  "httpPort": 5000, 
  "sslPort": 5001, 
  "publishAllPorts": false, 
  "useSSL": true
}

Passo 3: Arrumar a comunicação interna (O Pulo do Gato)

Como o front e o back estão em contêineres Docker isolados, o projeto Web não pode mais chamar localhost. Ele deve usar a porta HTTP interna e o host do Docker.

No appsettings.Development.json do VollMed.Web, altere a BaseUrl:

{
  "VollMed_WebApi": {
    // Usa host especial do Docker e a porta HTTP (6000) para evitar conflitos de SSL internamente
    "BaseAddress": "http://host.docker.internal:6000" 
  }
}

(Nota: O Entra ID no Portal do Azure não precisa saber disso. Para o Azure, a URL que importa é a do seu navegador, que continuará sendo https://localhost:5001).

Passo 4: Desativar Redirecionamento HTTPS na API

Como o Front agora chama a API via HTTP (6000), a API não pode forçar o redirecionamento para HTTPS, senão teremos erro de SSL entre os contêineres.

Vá no Program.cs do VollMed.WebApi e altere o redirecionamento para rodar apenas fora de desenvolvimento:

// Substitua o 'app.UseHttpsRedirection();' por isso:
if (!app.Environment.IsDevelopment())
{
    app.UseHttpsRedirection();
}

Pronto! Agora basta rodar o projeto selecionando o perfil docker-compose. O bloqueio do antivírus não afetará a aplicação rodando dentro do Linux/Docker, a autenticação com o Azure passará a funcionar e os projetos se comunicarão perfeitamente.

Espero que essa documentação economize o tempo de alguém! Bons estudos!

1 resposta
solução!

Bom dia, Lucas! Tudo bem?

Que post incrível o seu! Pensei que tinha aberto algum artigo da Medium sem querer, você descreveu muito bem o problema e como resolver esse caso. Espero que o máximo de pessoas vejam esse texto e tenham seus problemas solucionados em tempo mínimo.

No mais, bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!