Comparação: Microsoft Entra SDK para ID de Agente vs. In-Process Microsoft. Identity.Web

Este guia ajuda-o a identificar as diferenças entre o Microsoft Entra SDK para ID de Agente e a biblioteca em-processo Microsoft.Identity.Web para gerir a autenticação nas suas aplicações. A biblioteca Microsoft.Identity.Web integra-se diretamente em aplicações .NET para máximo desempenho. O Microsoft Entra SDK para Agent ID funciona como um contentor separado e suporta qualquer linguagem de programação através de APIs HTTP. A escolha da abordagem correta depende da arquitetura, linguagem e ambiente de implementação da sua aplicação.

Diferenças arquitetônicas

A diferença fundamental está em onde a lógica de autenticação é executada. Microsoft.Identity.Web corre dentro do seu processo da aplicação. O Microsoft Entra SDK para Agent ID funciona como um serviço independente juntamente com a sua aplicação. Essa escolha de arquitetura afeta fatores como fluxo de trabalho de desenvolvimento e complexidade operacional.

Aspeto Microsoft.Identity.Web (In-Process) SDK do Microsoft Entra para ID de Agente (Fora do Processo)
Limite do processo Compartilha o mesmo processo, memória e ciclo de vida do seu aplicativo, permitindo chamadas diretas de método e configuração compartilhada Mantém o isolamento completo, comunicando-se apenas através de APIs HTTP e gerindo os seus próprios recursos de forma independente
Acoplamento de idiomas Acopla fortemente a sua estratégia de autenticação ao .NET, exigindo experiência em C# e runtime .NET em todos os locais onde precisa de autenticação Desacopla a autenticação da pilha tecnológica da sua aplicação, expondo uma interface HTTP independente da linguagem que funciona igualmente bem com Python, Node.js, Go ou qualquer linguagem compatível com HTTP
Modelo de Implementação Implanta como pacotes NuGet integrados no ficheiro binário da sua aplicação, criando uma unidade de implantação monolítica. Implanta como uma imagem de contêiner separada, permitindo controle de versão, dimensionamento e atualizações independentes da lógica de autenticação sem afetar o código do aplicativo

Microsoft. Identity.Web (em processo)

Este excerto de código mostra como Microsoft.Identity.Web se integra diretamente numa aplicação 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 SDK para ID de Agente (Fora de Processo)

Este excerto de código demonstra como chamar o SDK Microsoft Entra para o ID do Agente a partir de uma aplicação Node.js usando HTTP. A chamada para o ponto de extremidade do /DownstreamApi SDK lida com a aquisição de token e chamadas de API subsequentes, incluindo a passagem 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 Microsoft Entra SDK para Agent ID
Suporte de idiomas Apenas C# / .NET Qualquer idioma (HTTP)
Implementação Biblioteca em processo Contentor separado
Aquisição de Tokens Acesso Direto MSAL.NET Via HTTP API
Cache de token Na memória, distribuído Computação em memória, distribuído
Fluxo OBO Apoio indígena Via endpoint HTTP
Credenciais do cliente Apoio indígena Via endpoint de HTTP
Identidade Gerenciada Apoio direto Apoio direto
Identidades do agente Via extensões Parâmetros de consulta
Validação de Token Middleware /Validar endpoint
API a jusante IDownstreamApi /DownstreamApi endpoint
Microsoft Graph Integração com SDK de grafos Via Downstream Api
Desempenho Em processamento (mais rápido possível) Sobrecarga de HTTP
Configuration appsettings.json e código appsettings.json e variáveis de ambiente
Depuração Depuração padrão do .NET Depuração de contêiner
Hot Reload .NET Hot Reload Reinício do contentor
Atualizações de pacotes Pacotes NuGet Imagens de contêiner
Licença MIT MIT

Quando usar cada abordagem

Decidir entre Microsoft.Identity.Web e o Microsoft Entra SDK para Agent ID depende dos requisitos, arquitetura e estratégia de implementação da sua aplicação. Dependendo das suas necessidades, uma abordagem pode ser mais adequada do que outra. As seguintes orientações podem ajudá-lo a tomar uma decisão informada.

Scenario Microsoft. Identity.Web (In-Process) SDK Microsoft Entra para ID de Agente (Fora do Processo)
Pilha de aplicativos Aplicações .NET exclusivamente
• ASP.NET Core Web APIs
• ASP.NET Core Aplicações Web
• .NET Serviços para Trabalhadores
• Aplicações Blazor
• Aplicativos Daemon
Microsserviços multilingues
• Node.js, Python, Go, Java serviços
• Arquiteturas poliglotas
• Serviços não-.NET
Integração de sistemas legados
Requisitos de desempenho O desempenho é fundamental
• Cenários de alto rendimento
• 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 pela autenticação
Necessidades de integração Integração profunda necessária
• Configuração personalizada do MSAL.NET
• Acesso direto aos recursos da MSAL
• Estratégias avançadas de cache de tokens
Integração padronizada
• API HTTP suficiente
• Padrões de autenticação consistentes em todos os serviços
Experiência de Desenvolvimento Desenvolvimento rápido
• Prototipagem rápida
• Recarga a quente para desenvolvimento
• Depuração .NET padrão
Desenvolvimento baseado em contêiner
• Reinício do contêiner para alterações
• Depuração de contêiner necessária
Equipe & Arquitetura Pilha de idioma único
• Especialização da equipa em C#/.NET
• Sem requisitos multilingues
Diversidade tecnológica
• Mistura de frameworks e linguagens
• Estrutura da equipa poliglota
Modelo de Implementação Implantações monolíticas
• Implantação de aplicativo único
• Modelos tradicionais de hospedagem
Implantações em contêineres
• Ambientes Kubernetes
• Configurações do Docker Compose
• Arquiteturas de malha de serviço
Operations Atualizações de autenticação acopladas
• Alterações de autenticação exigem reconstrução do aplicativo
• Ciclo de vida compartilhado com o aplicativo
Benefícios operacionais
• Escalonamento independente da lógica de autenticação
• Separe as atualizações de autenticação do código do aplicativo
• Monitorização centralizada da autenticação

Orientações em matéria de migração

Migrar de Microsoft.Identity.Web para o SDK Microsoft Entra para AgentID

Em certos cenários, pode querer migrar uma aplicação .NET existente que utilize a Microsoft. Identity.Web para aproveitar o Microsoft Entra SDK para o Agent ID para autenticação. As razões para a migração podem incluir a adoção de uma arquitetura multilíngue, a padronização da autenticação entre serviços ou a transição para um modelo de implementação conteinerizado.

É necessária uma consideração e planeamento cuidadosos antes de fazer esta 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 seu aplicativo.

Atenção

A Microsoft não recomenda sair da Microsoft. Identity.Web para o Microsoft Entra SDK para AgentID. Se optar por fazer esta alteração, os exemplos seguintes demonstram conceitos semelhantes noutras linguagens e frameworks.

Passo 1: Implementar o contentor do SDK

Primeiro, adiciona o contentor do SDK ao teu pod:

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

# After: App + Microsoft Entra SDK for AgentID
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

De seguida, transfira a 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"
    }
  }
}

Depois (Kubernetes ConfigMap / Variáveis de Ambiente)

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"

Passo 3: Atualizar o código da aplicação

Localize todas as instâncias de chamadas no processo para Microsoft.Identity.Web e substitua-as por chamadas HTTP para o SDK Microsoft Entra nos endpoints Agent ID.

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 excerto seguinte, vê chamadas ao SDK Microsoft Entra para o ID do Agente usando o endpoint /DownstreamApi para obter dados do utilizador. Os 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

Pode implementar a mesma lógica no TypeScript da seguinte forma:

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;
}

Passo 4: Remover as dependências de Microsoft.Identity.Web

Depois de completar os passos anteriores, organize a sua aplicação removendo os pacotes NuGet para a 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 ainda quiseres validar tokens na tua aplicação, não precisas de remover a configuração original de autenticação. Em vez disso, pode delegar a validação inteiramente ao Microsoft Entra SDK para o AgentID.

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

Passo 5: Testar e validar

  1. Testes unitários: Atualizar os testes para simular chamadas HTTP para o SDK.
  2. Testes de integração: Testar a comunicação do SDK no ambiente de testes.
  3. Testes de desempenho: Mede o impacto da sobrecarga HTTP.
  4. Testes de segurança: Validar a gestão de tokens e as políticas de rede.

Considerações sobre desempenho

Sobrecarga do SDK

O Microsoft Entra SDK para Agent ID introduz sobrecarga de comunicação HTTP:

Fator de desempenho Impacto Estratégia de mitigação
Latency Aproximadamente 1-5 ms por pedido de comunicação localhost Use HTTP/2 para reduzir a sobrecarga de ligação.
Throughput Limitado pelo agrupamento de conexões HTTP Implemente agrupamento de conexões para reutilizar conexões HTTP.
Memória Sobrecarga de memória de contêiner adicional Garantir uma alocação adequada de recursos do SDK.
Eficiência da Requisição Várias viagens de ida e volta para operações complexas Pedidos em lote para combinar múltiplas operações sempre que possível.
Desempenho do token Sobrecarga repetida de aquisição de tokens Aproveite a cache de tokens do SDK para um desempenho ótimo.

Desempenho em processo

Usar o Microsoft.Identity.Web tem uma sobrecarga mínima, uma vez que é executado no mesmo processo que a sua aplicação. Fornece chamadas nativas de método com latência de microssegundos e memória partilhada de processos sem limitações HTTP. Quando o desempenho é crítico, a integração em processo é a escolha ideal. No entanto, a flexibilidade e o design independente de linguagem do AgentID no SDK Microsoft Entra podem compensar os compromissos de desempenho em muitos cenários.

A tabela seguinte mostra algumas comparações de desempenho e custo para o uso em processo e o Microsoft Entra SDK para o uso do Agent ID (Fora do Processo):

Considerações de custos

Fator de Custo Microsoft. Identity.Web (In-Process) SDK Microsoft Entra para ID de Agente (Fora do Processo)
Computar CPU e memória adicionais mínimas no processo de aplicação Recursos adicionais de contentores por pod.
Network Sem despesas gerais adicionais Comunicação mínima com localhost.
Armazenamento Tamanho do pacote NuGet (~10 MB) Armazenamento de imagens em contentores.
Gestão Sem despesas gerais adicionais Sobrecarga de orquestração de contentores.

Exemplo de custo

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

Resource Em Processo Microsoft Entra SDK for Agent ID
Memória ~0 MB adicionais 10 × 128 MiB = 1,28 GB
Processador ~0% adicional 10 × 100m = 1 núcleo
Armazenamento ~10 MB por implantação Tamanho da imagem do contêiner por nó

Apoio e manutenção

Aspeto Microsoft. Identity.Web Microsoft Entra SDK for Agent ID
Updates Atualizações de pacotes NuGet Atualizações de imagem de contêiner
Alterações Disruptivas Através do versionamento de pacotes Através de tags de containers
Correções de bugs Integração em tempo de compilação Atualizações de contentor de ambiente de execução
Patches de segurança Reconstruir aplicação Reimplantar contêiner
Documentação Documentação extensa de .NET Esta documentação
Community Grande comunidade .NET Comunidade em crescimento

Abordagem híbrida

Podes combinar ambas as abordagens dentro da mesma arquitetura. Usa a Microsoft. Identity.Web para serviços .NET que exigem desempenho máximo, e utilize o Microsoft Entra SDK para ID de Agente para serviços não .NET ou quando precisa de padrões de autenticação independentes da linguagem. Esta estratégia híbrida ajuda-o a otimizar o desempenho onde é crítico, mantendo consistência e flexibilidade em todo o seu ecossistema de serviços.

Um exemplo de arquitetura é o 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 SDK for AgentID</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