Confronto: Microsoft Entra SDK per ID agente e In-Process Microsoft. Identity.Web

Questa guida consente di identificare le differenze tra l'SDK Microsoft Entra per l'ID agente e la libreria in-process Microsoft.Identity.Web per la gestione dell'autenticazione nelle applicazioni. Microsoft. La libreria Identity.Web si integra direttamente nelle applicazioni .NET per ottenere prestazioni massime. L'SDK di Microsoft Entra per l'ID agente viene eseguito come contenitore separato e supporta qualsiasi linguaggio di programmazione tramite LE API HTTP. La scelta dell'approccio corretto dipende dall'architettura, dal linguaggio e dall'ambiente di distribuzione dell'applicazione.

Differenze architetturali

La differenza fondamentale risiede nella posizione in cui viene eseguita la logica di autenticazione. Microsoft. Identity.Web viene eseguito all'interno del processo dell'applicazione. L'SDK Microsoft Entra per l'ID agente funziona come servizio indipendente insieme all'applicazione. Questa scelta dell'architettura influisce su fattori quali il flusso di lavoro di sviluppo e la complessità operativa.

Aspetto Microsoft.Identity.Web (In-Process) Microsoft Entra SDK per l'ID agente (out-of-process)
Limite del processo Condivide lo stesso processo, memoria e ciclo di vita dell'applicazione, abilitando le chiamate ai metodi diretti e la configurazione condivisa Mantiene l'isolamento completo, comunicando solo tramite le API HTTP e gestendo le proprie risorse in modo indipendente
Accoppiamento del linguaggio Associa strettamente la strategia di autenticazione a .NET, richiedendo esperienza C# e .NET runtime ovunque sia necessaria l'autenticazione Separa l'autenticazione dallo stack di tecnologie dell'applicazione, esponendo un'interfaccia HTTP indipendente dal linguaggio che funziona altrettanto bene con Python, Node.js, Go o qualsiasi linguaggio compatibile con HTTP
Modello di distribuzione Distribuisce come pacchetti NuGet incorporati nel file binario dell'applicazione, creando un'unità di distribuzione monolitica Distribuisce come immagine del contenitore separata, abilitando il controllo delle versioni, il ridimensionamento e gli aggiornamenti della logica di autenticazione senza influire sul codice dell'applicazione

Microsoft.Identity.Web (in-process)

Questo frammento di codice mostra come Microsoft. Identity.Web si integra direttamente in un'applicazione 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 per l'ID agente (fuori dal processo)

Questo frammento di codice illustra come chiamare Microsoft Entra SDK per l'ID agente da un'applicazione Node.js usando HTTP. La chiamata all'endpoint dell'SDK /DownstreamApi gestisce l'acquisizione di token e le chiamate API downstream, incluso il passaggio del token in ingresso per i flussi OBO nell'intestazione 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);
}

Confronto delle funzionalità

Caratteristica / Funzionalità Microsoft. Identity.Web Microsoft Entra SDK per l'ID agente
Supporto per la lingua Solo per C#/.NET Qualsiasi linguaggio (HTTP)
Deployment Libreria in corso Contenitore separato
Acquisizione di token MSAL.NET diretta Tramite l'API HTTP
Memorizzazione nella cache dei token In-memory distribuito In memoria distribuita
Flusso OBO Supporto nativo Tramite endpoint HTTP
Credenziali Client Supporto nativo Tramite endpoint HTTP
Identità gestita Supporto diretto Supporto diretto
Identità agente Tramite estensioni Parametri di query
Convalida dei token Middleware /Convalida endpoint
Downstream API IDownstreamApi Endpoint /DownstreamApi
Microsoft Graph Integrazione di Graph SDK Attraverso DownstreamApi
Prestazioni In-process (il più veloce) Overhead HTTP
Configuration appsettings.json e codice appsettings.json e variabili di ambiente
Debug Debug di .NET standard Debug dei contenitori
Ricaricamento rapido .NET Ricaricamento rapido Riavvio del contenitore
Aggiornamenti dei pacchetti Pacchetti NuGet Immagini dei contenitori
Licenza MIT MIT

Quando usare ogni approccio

Decidere tra Microsoft. Identity.Web e Microsoft Entra SDK per l'ID agente dipendono dai requisiti, dall'architettura e dalla strategia di distribuzione dell'applicazione. A seconda delle esigenze, un approccio potrebbe essere più adatto rispetto all'altro. Le linee guida seguenti consentono di prendere una decisione informata.

Scenario Microsoft.Identity.Web (In-Process) Microsoft Entra SDK per l'ID agente (fuori processo)
Stack di applicazioni applicazioni .NET esclusivamente
• API Web ASP.NET Core
• ASP.NET Core App Web
• servizi di lavoro .NET
• Applicazioni Blazor
• App demone
Microservizi multilingua
• Node.js, Python, Go, Java servizi
• Architetture poliglotte
• Servizi non .NET
• Integrazione dei sistemi legacy
Requisiti di prestazioni Le prestazioni sono fondamentali
• Scenari con velocità effettiva elevata
• Operazioni sensibili alla latenza
• Ogni millisecondo conta
Può tollerare il sovraccarico HTTP
• Circa 1-5 ms di latenza aggiuntiva accettabile
• Velocità effettiva non limitata dall'autenticazione
Esigenze di integrazione Integrazione approfondita richiesta
• Configurazione MSAL.NET personalizzata
• Accesso diretto alle funzionalità MSAL
• Strategie avanzate della cache dei token
Integrazione standardizzata
• API HTTP sufficiente
• Modelli di autenticazione coerenti tra i servizi
Esperienza di sviluppo Sviluppo rapido
• Creazione rapida di prototipi
• Ricaricamento rapido per lo sviluppo
• Debug .NET standard
Sviluppo basato su contenitori
• Riavvio del contenitore per le modifiche
• È necessario eseguire il debug dei contenitori
Team & Architecture Stack a linguaggio singolo
• Esperienza del team in C#/.NET
• Nessun requisito multilingue
Diversità tecnologica
• Combinazione di framework e linguaggi
• Struttura del team poliglotta
Modello di distribuzione Distribuzioni monolitiche
• Distribuzione di un'applicazione singola
• Modelli di hosting tradizionali
Distribuzioni in contenitori
• Ambienti Kubernetes
• Configurazioni di Docker Compose
• Architetture di service mesh
Operations Aggiornamenti dell'autenticazione accoppiata
• Le modifiche all'autenticazione richiedono la ricompilazione dell'app
• Ciclo di vita condiviso con l'applicazione
Vantaggi operativi
• Scalabilità indipendente della logica di autenticazione
• Separare gli aggiornamenti dell'autenticazione dal codice dell'app
• Monitoraggio centralizzato dell'autenticazione

Indicazioni sulla migrazione

Migrazione da Microsoft. Identity.Web per Microsoft Entra SDK per AgentID

In alcuni scenari può essere necessario eseguire la migrazione di un'applicazione .NET esistente che usa Microsoft. Identity.Web per sfruttare Microsoft Entra SDK per l'ID agente per l'autenticazione. I motivi della migrazione possono includere l'adozione di un'architettura multi-linguaggio, la standardizzazione dell'autenticazione tra i servizi o il passaggio a un modello di distribuzione in contenitori.

Prima di apportare questa modifica, è necessario prestare attenzione alla valutazione e alla pianificazione. Questa sezione fornisce un percorso di migrazione di alto livello con esempi di codice che consentono di eseguire la transizione dell'applicazione.

Attenzione

Microsoft non consiglia di passare da Microsoft. Identity.Web per Microsoft Entra SDK per AgentID. Se si sceglie di apportare questa modifica, gli esempi seguenti illustrano concetti simili in altri linguaggi e framework.

Passaggio 1: Distribuire il contenitore SDK

Aggiungere prima di tutto il contenitore SDK al 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"

Passaggio 2: Eseguire la migrazione della configurazione

Trasferire quindi la configurazione da appsettings.json a variabili di ambiente:

Before (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"
    }
  }
}

Dopo (Kubernetes ConfigMap/Variabili di 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"

Passaggio 3: Aggiornare il codice dell'applicazione

Individuare tutte le istanze di chiamate in-process a Microsoft.Identity.Web e sostituirle con chiamate HTTP agli endpoint Microsoft Entra SDK per l'Agent ID:

Before (C# con 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);
    }
}

Dopo (qualsiasi linguaggio con client HTTP):

Nel frammento di codice seguente vengono visualizzate chiamate all'SDK di Microsoft Entra per l'ID agente usando l'endpoint /DownstreamApi per ottenere i dati utente. Gli esempi sono disponibili in 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

È possibile implementare la stessa logica in TypeScript come indicato di seguito:

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

Passaggio 4: Rimuovere le dipendenze di Microsoft.Identity.Web

Dopo aver completato i passaggi precedenti, riordinare l'applicazione rimuovendo i pacchetti NuGet per Microsoft. Identity.Web dal progetto:

<!-- 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 si vogliono comunque convalidare i token nell'app, non è necessario rimuovere la configurazione di autenticazione originale. È invece possibile delegare interamente la convalida all'SDK di Microsoft Entra per AgentID.

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

Passaggio 5: Testare e convalidare

  1. Unit test: aggiornare i test per simulare le chiamate HTTP all'SDK.
  2. Test di integrazione: verificare la comunicazione dell'SDK nell'ambiente di staging.
  3. Test delle prestazioni: misurare l'impatto dell'overhead HTTP.
  4. Test di sicurezza: convalidare la gestione dei token e i criteri di rete.

Considerazioni sulle prestazioni

Costi generali dell'SDK

L'SDK di Microsoft Entra per l'ID agente introduce un sovraccarico di comunicazione HTTP:

Fattore di prestazioni Impatto Strategia di mitigazione
Latency Circa 1-5 ms per richiesta di comunicazione localhost Usare HTTP/2 per ridurre il sovraccarico della connessione.
Throughput Limitato dal pool di connessioni HTTP Implementare il pool di connessioni per riutilizzare le connessioni HTTP.
Memoria Sovraccarico aggiuntivo della memoria del contenitore Assicurarsi un'allocazione adeguata delle risorse SDK.
Efficienza delle richieste Trasferimenti multipli per operazioni complesse È consigliato utilizzare richieste batch per combinare più operazioni, quando possibile.
Prestazioni dei token Sovraccarico di acquisizione di token ripetuto Sfruttare la cache dei token dell'SDK per ottenere prestazioni ottimali.

Prestazioni del processo

L'utilizzo di Microsoft Identity.Web ha un sovraccarico minimo perché viene eseguito nello stesso processo dell'applicazione. Fornisce chiamate al metodo nativo con latenza microseconda e memoria del processo condiviso senza limitazioni HTTP. Quando le prestazioni sono critiche, l'integrazione in-process è la scelta ottimale. Tuttavia, l'SDK di Microsoft Entra, grazie alla sua flessibilità e al design indipendente dal linguaggio di AgentID, potrebbe superare i compromessi delle prestazioni in molti scenari.

La tabella seguente mostra alcuni confronti di prestazioni e costi per l'utilizzo in-process e per l'utilizzo dell'SDK di Microsoft Entra per l'Agente ID (fuori-processo).

Considerazioni sui costi

Fattore di costo Microsoft.Identity.Web (In-Process) Microsoft Entra SDK per l'ID agente (fuori processo)
Calcolo Cpu e memoria aggiuntive minime nel processo dell'applicazione Risorse aggiuntive del contenitore per ciascun pod.
Network Nessun sovraccarico aggiuntivo Comunicazione minima su localhost.
Spazio di archiviazione Dimensioni del pacchetto NuGet (~10 MB) Archiviazione di immagini del contenitore.
Gestione Nessun sovraccarico aggiuntivo Overhead dell'orchestrazione dei contenitori.

Esempio di costo

Per 10 repliche con configurazione 128 MiB/100m SDK:

Conto risorse In lavorazione Microsoft Entra SDK per l'ID agente
Memoria ~0 MB aggiuntivi 10 × 128 MiB = 1,28 GB
CPU ~0% aggiuntivo 10 × 100m = 1 core
Spazio di archiviazione ~10 MB per implementazione Dimensioni dell'immagine del contenitore per nodo

Supporto e manutenzione

Aspetto Microsoft. Identity.Web Microsoft Entra SDK per l'ID agente
Updates Aggiornamenti dei pacchetti NuGet Aggiornamenti delle immagini del contenitore
Modifiche di rilievo Tramite il controllo delle versioni dei pacchetti Tramite tag contenitore
Correzioni di bug Integrazione in fase di compilazione Aggiornamenti dei contenitori di runtime
Patch di sicurezza Ricompilare l'applicazione Ridistribuire il contenitore
Documentazione Documentazione completa di .NET Questa documentazione
Community Community di .NET di grandi dimensioni Community in crescita

Approccio ibrido

È possibile combinare entrambi gli approcci all'interno della stessa architettura. Usare Microsoft. Identity.Web per i servizi di .NET che richiedono prestazioni massime e usano Microsoft Entra SDK per l'ID agente per i servizi non .NET o quando sono necessari modelli di autenticazione indipendenti dal linguaggio. Questa strategia ibrida consente di ottimizzare le prestazioni in cui è fondamentale mantenendo la coerenza e la flessibilità nell'intero ecosistema di servizi.

Un'architettura di esempio è la seguente:

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