Comparação: Microsoft Entra ID SDK de Autenticação (sidecar) vs. In-Process Microsoft. Identity.Web

Este guia ajuda você a identificar as diferenças entre o Microsoft Entra ID Auth SDK (sidecar) e a biblioteca Microsoft.Identity.Web em processo para gerenciar a autenticação em seus aplicativos. A biblioteca Microsoft.Identity.Web integra-se diretamente a aplicativos .NET para obter o máximo desempenho. O SDK de Autenticação Microsoft Entra ID (sidecar) é executado como um contêiner separado e dá suporte a qualquer linguagem de programação por meio de APIs HTTP. Escolher a abordagem correta depende da arquitetura, linguagem e ambiente de implantação do aplicativo.

Diferenças de arquitetura

A diferença fundamental está no local em que a lógica de autenticação é executada. Microsoft.Identity.Web é executado no processo do seu aplicativo. O SDK de autenticação Microsoft Entra ID (sidecar) funciona como um serviço independente ao lado do aplicativo. Essa escolha arquitetônica afeta fatores como fluxo de trabalho de desenvolvimento e complexidade operacional.

Aspecto Microsoft.Identity.Web (In-Process) Microsoft Entra ID SDK de autenticação (sidecar) (fora de processo)
Limite do processo Compartilha o mesmo processo, memória e ciclo de vida que seu aplicativo, habilitando chamadas de método direto e configuração compartilhada Mantém o isolamento completo, comunicando-se somente por meio de APIs HTTP e gerenciando seus próprios recursos de forma independente
Acoplamento de idioma Associa firmemente sua estratégia de autenticação para .NET, exigindo experiência em C# e .NET runtime em todos os lugares em que você precisa de autenticação Desassocia a autenticação do stack de tecnologia do seu aplicativo, expondo uma interface HTTP compatível com qualquer linguagem, funcionando igualmente bem com Python, Node.js, Go ou qualquer linguagem compatível com HTTP.
Modelo de Implantação Implanta como pacotes NuGet incorporados ao binário do seu aplicativo, criando uma unidade de distribuição monolítica Implanta como uma imagem de contêiner separada, habilitando o controle de versão independente, o dimensionamento e as atualizações da lógica de autenticação sem afetar o código do aplicativo

Microsoft. Identity.Web (em processo)

Este snippet de código mostra como o Microsoft.Identity.Web integra-se diretamente a um aplicativo ASP.NET Core.

// Startup configuration
services.AddMicrosoftIdentityWebApiAuthentication(Configuration)
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddDownstreamApi("Graph", Configuration.GetSection("DownstreamApis:Graph"))
    .AddInMemoryTokenCaches();

// Usage in controller
public class MyController : ControllerBase
{
    private readonly IDownstreamApi _downstreamApi;
    
    public MyController(IDownstreamApi downstreamApi)
    {
        _downstreamApi = downstreamApi;
    }
    
    public async Task<ActionResult> GetUserData()
    {
        var user = await _downstreamApi.GetForUserAsync<User>("Graph", 
            options => options.RelativePath = "me");
        return Ok(user);
    }
}

Microsoft Entra ID SDK de autenticação (sidecar) (fora de processo)

Este trecho de código demonstra como chamar o SDK de autenticação do Microsoft Entra ID (sidecar) a partir de um aplicativo Node.js usando HTTP. A chamada para o ponto de extremidade do SDK manipula a aquisição de token /DownstreamApi e realiza chamadas à API subsequente, incluindo a transmissão do token de entrada para fluxos OBO no cabeçalho Authorization.

// Configuration
const SidecarUrl = process.env.SIDECAR_URL || "http://localhost:5000";

// Usage in application
async function getUserData(incomingToken: string) {
  const response = await fetch(
    `${SidecarUrl}/DownstreamApi/Graph?optionsOverride.RelativePath=me`,
    {
      headers: {
        'Authorization': `Bearer ${incomingToken}`
      }
    }
  );
  
  const result = await response.json();
  return JSON.parse(result.content);
}

Comparação de funcionalidades

Característica Microsoft. Identity.Web SDK de Autenticação do Microsoft Entra ID (sidecar)
Suporte ao idioma Somente C#/.NET Qualquer idioma (HTTP)
Implantação Biblioteca em processo Contêiner separado
Aquisição de token Uso direto de MSAL.NET Por meio da API HTTP
Cache de token Armazenamento em memória, distribuído Armazenamento em memória, distribuído
OBO Flow Suporte nativo Por meio do ponto de extremidade HTTP
Credenciais do cliente Suporte nativo Por meio do ponto de extremidade HTTP
Identidade Gerenciada Suporte direto Suporte direto
Identidades do agente Por meio de extensões Parâmetros de consulta
Validação de token Middleware /Validar ponto de extremidade
Downstream API IDownstreamApi Ponto de extremidade /DownstreamApi
Microsoft Graph Integração do SDK do Graph Via DownstreamApi
Desempenho Em andamento (mais rápido) Sobrecarga HTTP
Configuration appsettings.json e código appsettings.json e variáveis de ambiente
Depuração de Depuração padrão do .NET Depuração de contêiner
Recarga Rápida Recarga Rápida do .NET Reinicialização do contêiner
Atualizações de pacote Pacotes NuGet Imagens de contêiner
Licença MIT MIT

Quando usar cada abordagem

A escolha entre o Microsoft.Identity.Web e o SDK de autenticação do Microsoft Entra ID (sidecar) depende dos requisitos, da arquitetura e da estratégia de implantação do seu aplicativo. Dependendo de suas necessidades, uma abordagem pode ser mais adequada do que a outra. As diretrizes a seguir podem ajudá-lo a tomar uma decisão informada.

Scenario Microsoft.Identity.Web (In-Process) Microsoft Entra ID SDK de autenticação (sidecar) (fora de processo)
Pilha de Aplicativos aplicativos .NET exclusivamente
• APIs Web do ASP.NET Core
• ASP.NET Principais Aplicativos Web
• Serviços de Trabalho do .NET
• Aplicativos Blazor
• Aplicativos de apoio (daemon)
Microsserviços de vários idiomas
• serviços Node.js, Python, Go, Java
• Arquiteturas poliglotas
• Serviços não .NET
• Integração de sistemas legados
Requisitos de desempenho O desempenho é crítico
• Cenários de alta taxa de transferência
• Operações sensíveis à latência
Cada milissegundo conta
Pode tolerar sobrecarga HTTP
• ~1-5ms latência adicional aceitável
• Taxa de transferência não limitada por autenticação
Necessidades de integração Integração profunda necessária
• Configuração de MSAL.NET personalizada
• Acesso direto aos recursos da MSAL
• Estratégias avançadas de cache de token
Integração padronizada
• API HTTP suficiente
• Padrões de autenticação consistentes entre serviços
Experiência de desenvolvimento Desenvolvimento rápido
• Criação rápida de protótipos
• Recarregamento frequente para desenvolvimento
• Depuração padrão para .NET
Desenvolvimento baseado em contêiner
• Reinicialização do contêiner para alterações
• É necessária a depuração de contêiner
Equipe e Arquitetura Stack de linguagem única
• Experiência em equipe em C#/.NET
• Sem requisitos de vários idiomas
Diversidade tecnológica
• Combinação de estruturas e idiomas
• Estrutura de equipe poliglota
Modelo de Implantação Implantações monolíticas
• Implantação de aplicativo único
• Modelos de hospedagem tradicionais
Implantações em contêineres
• Ambientes do Kubernetes
• Configurações do Docker Compose
• Arquiteturas de malha de serviço
Operations Atualizações de autenticação acopladas
• As alterações de autenticação exigem a recompilação do aplicativo
• Ciclo de vida compartilhado com o aplicativo
Benefícios operacionais
• Dimensionamento independente da lógica de autenticação
• Separar atualizações de autenticação do código do aplicativo
• Monitoramento centralizado de autenticação

Diretrizes de migração

Migrando de Microsoft.Identity.Web para o SDK de autenticação do Microsoft Entra ID (sidecar)

Em determinados cenários, talvez você queira migrar um aplicativo .NET existente que usa Microsoft. Identity.Web para aproveitar o SDK de Autenticação Microsoft Entra ID (sidecar) para autenticação. Os motivos para a migração podem incluir a adoção de uma arquitetura de vários idiomas, a padronização da autenticação entre serviços ou a mudança para um modelo de implantação em contêineres.

Consideração e planejamento cuidadosos são necessários antes de fazer essa alteração. Esta seção fornece um caminho de migração de alto nível com exemplos de código para ajudá-lo a fazer a transição do aplicativo.

Cuidado

Microsoft não recomenda mudar de Microsoft. Identity.Web para o SDK de Autenticação Microsoft Entra ID (sidecar). Se você optar por fazer essa alteração, os exemplos a seguir demonstram conceitos semelhantes em outros idiomas e estruturas.

Etapa 1: Implantar contêiner do SDK

Primeiro, adicione o contêiner do SDK ao pod:

# Before: Single ASP.NET Core container
containers:
- name: app
  image: myregistry/myapp:latest

# After: App + Microsoft Entra ID Auth SDK (sidecar)
containers:
- name: app
  image: myregistry/myapp:latest
  env:
  - name: SIDECAR_URL
    value: "http://localhost:5000"

- name: sidecar
  image: mcr.microsoft.com/entra-sdk/auth-sidecar:1.0.0
  env:
  - name: AzureAd__TenantId
    value: "your-tenant-id"
  - name: AzureAd__ClientId
    value: "your-client-id"

Etapa 2: Migrar a configuração

Em seguida, transfira sua configuração de appsettings.json para variáveis de ambiente.

Antes (appsettings.json)

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "your-tenant-id",
    "ClientId": "your-client-id"
  },
  "DownstreamApis": {
    "Graph": {
      "BaseUrl": "https://graph.microsoft.com/v1.0",
      "Scopes": "User.Read Mail.Read", 
      "RelativePath": "/me"
    }
  }
}

After (Kubernetes ConfigMap/Environment Variables)

apiVersion: v1
kind: ConfigMap
metadata:
  name: sidecar-config
data:
  AzureAd__Instance: "https://login.microsoftonline.com/"
  AzureAd__TenantId: "your-tenant-id"
  AzureAd__ClientId: "your-client-id"
  DownstreamApis__Graph__BaseUrl: "https://graph.microsoft.com/v1.0"
  DownstreamApis__Graph__Scopes: "User.Read Mail.Read"
  DownstreamApis__Graph__RelativePath: "/me"

Etapa 3: Atualizar o código do aplicativo

Identifique todas as instâncias de chamadas no processo para o Microsoft.Identity.Web e substitua-as por chamadas HTTP para os pontos de extremidade do SDK de autenticação do Microsoft Entra ID (sidecar):

Antes (C# com IDownstreamApi):

public class UserController : ControllerBase
{
    private readonly IDownstreamApi _downstreamApi;
    
    public UserController(IDownstreamApi downstreamApi)
    {
        _downstreamApi = downstreamApi;
    }
    
    [HttpGet]
    public async Task<ActionResult<User>> GetMe()
    {
        var user = await _downstreamApi.GetForUserAsync<User>(
            "Graph",
            options => options.RelativePath = "me"
        );
        return Ok(user);
    }
}

Depois (qualquer idioma com cliente HTTP):

No trecho de código a seguir, você verá chamadas ao SDK de autenticação do Microsoft Entra ID (sidecar) usando o ponto de extremidade /DownstreamApi para obter os dados do usuário. Exemplos são fornecidos em C# e TypeScript.

public class UserController : ControllerBase
{
    private readonly HttpClient _httpClient;
    private readonly string _SidecarUrl;
    
    public UserController(IHttpClientFactory httpClientFactory, IConfiguration config)
    {
        _httpClient = httpClientFactory.CreateClient();
        _SidecarUrl = config["SIDECAR_URL"];
    }
    
    [HttpGet]
    public async Task<ActionResult<User>> GetMe()
    {
        var inboundAuthorizationHeader = Request.Headers["Authorization"].ToString();
        // this validates the inbound authorization header and calls the downstream API.
        // If you don't call a downstream API, Do validate the inbound authorization header 
        // (calling the /Validate endpoint)
        var request = new HttpRequestMessage(
            HttpMethod.Get,
            $"{_SidecarUrl}/DownstreamApi/Graph?optionsOverride.RelativePath=me"
        );
        request.Headers.Add("Authorization", inboundAuthorizationHeader);
        
        var response = await _httpClient.SendAsync(request);
        var result = await response.Content.ReadFromJsonAsync<SidecarResponse>();
        var user = JsonSerializer.Deserialize<User>(result.Content);
        return Ok(user);
    }
}

TypeScript

Você pode implementar a mesma lógica no TypeScript da seguinte maneira:

export async function getMe(incomingToken: string): Promise<User> {
  const SidecarUrl = process.env.SIDECAR_URL!;
  
  const response = await fetch(
    `${SidecarUrl}/DownstreamApi/Graph?optionsOverride.RelativePath=me`,
    {
      headers: {
        'Authorization': incomingToken
      }
    }
  );
  
  const result = await response.json();
  return JSON.parse(result.content) as User;
}

Etapa 4: Remover dependências de Microsoft.Identity.Web

Depois de concluir as etapas anteriores, arrume seu aplicativo removendo os pacotes NuGet para Microsoft. Identity.Web do seu projeto:

<!-- Remove these from .csproj -->
<PackageReference Include="Microsoft.Identity.Web" Version="..." />
<PackageReference Include="Microsoft.Identity.Web.MicrosoftGraph" Version="..." />
<PackageReference Include="Microsoft.Identity.Web.DownstreamApi" Version="..." />

Se você ainda quiser validar tokens em seu aplicativo, não precisará remover a configuração de autenticação original. Em vez disso, você pode delegar inteiramente a validação ao SDK de autenticação do Microsoft Entra ID (sidecar).

// Remove from Program.cs or Startup.cs
services.AddMicrosoftIdentityWebApiAuthentication(Configuration)
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddDownstreamApi("Graph", Configuration.GetSection("DownstreamApis:Graph"))
    .AddInMemoryTokenCaches();

Etapa 5: Testar e validar

  1. Testes de unidade: atualize os testes para simular chamadas HTTP para o SDK.
  2. Testes de integração: teste a comunicação do SDK em ambiente de teste.
  3. Testes de desempenho: medir o impacto de sobrecarga HTTP.
  4. Testes de segurança: validar o tratamento de tokens e as políticas de rede.

Considerações sobre desempenho

Sobrecarga do SDK

O SDK de autenticação do Microsoft Entra ID (sidecar) introduz uma sobrecarga de comunicação HTTP:

Fator de desempenho Impacto Estratégia de mitigação
Latency Aproximadamente 1 a 5 ms por solicitação de comunicação localhost Use HTTP/2 para reduzir a sobrecarga de conexão.
Throughput Limitado pelo agrupamento de conexões HTTP Implemente o pool de conexões para reutilizar conexões HTTP.
Memory Sobrecarga de memória de contêiner adicional Verifique a alocação adequada de recursos do SDK.
Eficiência da solicitação Várias viagens de ida e volta para operações complexas Solicitações em lote para combinar várias operações quando possível.
Desempenho do token Sobrecarga de aquisição de token repetida Aproveite o cache de token do SDK para obter um desempenho ideal.

Desempenho em Processo

Usando Microsoft. Identity.Web tem sobrecarga mínima, pois é executada no mesmo processo que seu aplicativo. Ele fornece chamadas de método nativo com latência de microssegundos e memória de processo compartilhado sem limitações HTTP. Quando o desempenho é crítico, a integração em processo é a opção ideal. No entanto, a flexibilidade e o design que independe de linguagem do SDK de autenticação do Microsoft Entra ID (sidecar) podem superar as perdas de desempenho em muitos cenários.

A tabela a seguir mostra algumas comparações de desempenho e custo entre o uso no processo e o uso do SDK de autenticação do Microsoft Entra ID (sidecar) (fora do processo):

Considerações de custo

Fator de Custo Microsoft.Identity.Web (In-Process) Microsoft Entra ID SDK de autenticação (sidecar) (fora de processo)
Calcule Mínimo adicional de CPU e memória no processo do aplicativo Recursos de contêiner adicionais por pod.
Network Nenhuma sobrecarga adicional Comunicação de localhost mínima.
Armazenamento Tamanho do pacote NuGet (aproximadamente 10 MB) Armazenamento de imagens de contêiner.
Gestão Nenhuma sobrecarga adicional Sobrecarga de orquestração de contêiner.

Exemplo de custo

Para 10 réplicas com configuração de SDK de 128 MiB/100m:

Resource Em Processo SDK de Autenticação do Microsoft Entra ID (sidecar)
Memory ~0 MB adicionais 10 × 128 MiB = 1,28 GB
CPU ~0% adicional 10 × 100m = 1 núcleo
Armazenamento ~10 MB por implantação Tamanho da imagem do contêiner por nó

Suporte e manutenção

Aspecto Microsoft. Identity.Web SDK de Autenticação do Microsoft Entra ID (sidecar)
Updates Atualizações do pacote NuGet Atualizações de imagem de contêiner
Alterações de ruptura Por meio da versionamento do pacote Por meio de tags de contêiner
Correções de bug Integração em tempo de compilação Atualizações de contêiner em tempo de execução
Patches de segurança Recompilar aplicativo Reimplantar contêiner
Documentação Documentos de .NET extensos Esta documentação
Community Comunidade grande de .NET Comunidade em crescimento

Abordagem híbrida

Você pode combinar ambas as abordagens dentro da mesma arquitetura. Use Microsoft.Identity.Web para serviços .NET que exigem máximo desempenho e use o SDK de Autenticação do Microsoft Entra ID (sidecar) para serviços que não sejam .NET ou quando você precisar de padrões de autenticação independentes de linguagem. Essa estratégia híbrida ajuda você a otimizar o desempenho em que ele é crítico, mantendo a consistência e a flexibilidade em todo o ecossistema de serviços.

Uma arquitetura de exemplo é a seguinte:

graph TB
    subgraph cluster["Kubernetes Cluster"]
        subgraph netpod["<b>.NET API Pod</b>"]
            netapi["<b>.NET API</b><br/>(Microsoft.Identity.Web)"]
            style netapi fill:#0078d4,stroke:#005a9e,stroke-width:2px,color:#fff
        end
        subgraph nodepod["<b>Node.js API Pod</b>"]
            nodeapi["<b>Node.js API</b>"]
            sidecar["<b>Microsoft Entra ID Auth SDK (sidecar)</b>"]
            style nodeapi fill:#68a063,stroke:#4a7c45,stroke-width:2px,color:#fff
            style sidecar fill:#f2711c,stroke:#d85e10,stroke-width:2px,color:#fff
        end
    end
    style cluster fill:#f0f0f0,stroke:#333,stroke-width:3px
    style netpod fill:#e8f4f8,stroke:#0078d4,stroke-width:2px
    style nodepod fill:#e8f4e8,stroke:#68a063,stroke-width:2px