Vergleich: Microsoft Entra SDK für Agent-ID und In-Process Microsoft. Identity.Web

Dieses Handbuch hilft Ihnen, die Unterschiede zwischen dem Microsoft Entra SDK für Agent-ID und der prozessinternen Microsoft.Identity.Web-Bibliothek zur Authentifizierung Ihrer Anwendungen zu ermitteln. Die Microsoft. Identity.Web library ist direkt in .NET Anwendungen integriert, um maximale Leistung zu erzielen. Das Microsoft Entra SDK für Agent-ID wird als separater Container ausgeführt und unterstützt jede Programmiersprache über HTTP-APIs. Die Auswahl des richtigen Ansatzes hängt von der Architektur, Sprache und Bereitstellungsumgebung Ihrer Anwendung ab.

Architekturunterschiede

Der grundlegende Unterschied liegt darin , wo die Authentifizierungslogik ausgeführt wird. Microsoft. Identity.Web wird innerhalb Ihres Anwendungsprozesses ausgeführt. Das Microsoft Entra SDK für Agent-ID arbeitet neben Ihrer Anwendung als eigenständiger Dienst. Diese Architekturauswahl wirkt sich auf Faktoren wie Entwicklungsworkflow und betriebstechnische Komplexität aus.

Aspekt Microsoft.Identity.Web (In-Process) Microsoft Entra SDK für Agent-ID (Außerhalb des Prozesses)
Prozessgrenze Teilt den gleichen Prozess, Arbeitsspeicher und Lebenszyklus wie Ihre Anwendung, wodurch direkte Methodenaufrufe und freigegebene Konfigurationen aktiviert werden Verwaltet vollständige Isolation, kommuniziert nur über HTTP-APIs und verwaltet eigene Ressourcen unabhängig.
Sprachkopplung Koppelt Ihre Authentifizierungsstrategie eng mit .NET, erfordert C#-Erfahrung und .NET Laufzeit überall, wo Sie Authentifizierung benötigen Entkoppelt die Authentifizierung von der Technologie-Stack Ihrer Anwendung und stellt eine sprachunabhängige HTTP-Schnittstelle zur Verfügung, die sowohl mit Python, Node.js, Go als auch mit jeder HTTP-fähigen Sprache gleichermaßen gut funktioniert.
Bereitstellungsmodell Stellt als nuGet-Pakete bereit, die in Ihre Anwendungs-Binärdatei eingebettet sind, und erstellt eine monolithische Bereitstellungseinheit. Wird als separates Container-Image bereitgestellt, was eine unabhängige Versionsverwaltung, Skalierung und Aktualisierung der Authentifizierungslogik ermöglicht, ohne dass sich das auf Ihren Anwendungscode auswirkt.

Microsoft.Identity.Web (in-process)

Dieser Codeausschnitt zeigt, wie Microsoft. Identity.Web integriert sich direkt in eine ASP.NET Core Anwendung:

// 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 für Agent-ID (außerhalb des Prozesses)

Dieser Codeausschnitt veranschaulicht, wie das Microsoft Entra SDK für Agent-ID aus einer Node.js Anwendung mithilfe von HTTP aufgerufen wird. Der Aufruf des /DownstreamApi Endpunkts des SDK übernimmt die Verarbeitung der Tokenakquisition und der aufeinanderfolgenden API-Aufrufe. Hierbei wird das eingehende Token für OBO-Flows im Authorization Header übergeben.

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

Funktionsvergleich

Merkmal Microsoft. Identity.Web Microsoft Entra SDK für Agent-ID
Sprachunterstützung Nur C# /.NET Jede Sprache (HTTP)
Deployment In-Process-Bibliothek Getrennter Container
Tokenerwerb Direkte Verwendung von MSAL.NET Über HTTP-API
Token-Cache Verteilt im Arbeitsspeicher Im Arbeitsspeicher verteilt
OBO-Fluss Native Unterstützung Über HTTP-Endpunkt
Clientanmeldeinformationen Native Unterstützung Über HTTP-Endpunkt
Verwaltete Identität Direkter Support Direkter Support
Agentidentitäten Über Erweiterungen Abfrageparameter
Tokenüberprüfung Middleware /Validierungsendpunkt
Downstream-API IDownstreamApi /DownstreamApi-Endpunkt
Microsoft Graph Graph SDK-Integration Über DownstreamApi
Leistung Prozessintern (am schnellsten) HTTP-Overhead
Configuration appsettings.json und Code appsettings.json und Umgebungsvariablen
Debuggen Standard-Debugging .NET Containerdebugging
Hot Reload .NET Hot Reload Containerneustart
Paketaktualisierungen NuGet-Pakete Container-Abbilder
Lizenz MIT MIT

Wann jeder Ansatz verwendet werden soll

Die Entscheidung zwischen Microsoft.Identity.Web und dem Microsoft Entra SDK für Agent-ID hängt von den Anforderungen, der Architektur und der Bereitstellungsstrategie Ihrer Anwendung ab. Je nach Ihren Anforderungen ist ein Ansatz möglicherweise besser geeignet als der andere. Die folgenden Richtlinien können Ihnen dabei helfen, eine fundierte Entscheidung zu treffen.

Scenario Microsoft.Identity.Web (In-Process) Microsoft Entra SDK für Agent-ID (Out-of-Process)
Anwendungsstapel .NET Anwendungen ausschließlich
• ASP.NET Core Web-APIs
• ASP.NET Core Web-Apps
• .NET Worker Services
• Blazor-Anwendungen
• Daemon-Apps
Mehrsprachige Microservices
• Node.js, Python, Go, Java Services
• Polyglot-Architekturen
• Nicht-.NET-Dienste
• Integration von Legacysystemen
Leistungsanforderungen Die Leistung ist kritisch.
• Szenarien mit hohem Durchsatz
• Latenzempfindliche Vorgänge
• Jede Millisekunde zählt
Kann HTTP-Overhead tolerieren
• ~1-5 ms zusätzliche Latenz akzeptabel
• Der Durchsatz wird nicht durch die Authentifizierung eingeschränkt
Integrationsanforderungen Tiefe Integration erforderlich
Benutzerdefinierte Konfiguration von MSAL.NET
• Direkter Zugriff auf MSAL-Features
• Erweiterte Tokencachestrategien
Standardisierte Integration
• HTTP-API ausreichend
• Einheitliche Authentifizierungsmuster für diensteübergreifende Dienste
Entwicklungserfahrung Schnelle Entwicklung
• Schnelle Prototyperstellung
• Hot-Reloading für die Entwicklung
• Standard- .NET-Debugging
Containerbasierte Entwicklung
• Containerneustart für Änderungen
• Containerdebugging erforderlich
Team & Architektur Einsprachiger Stack
• Teamkompetenz in C#/.NET
• Keine mehrsprachigen Anforderungen
Technologievielfalt
• Mischung aus Frameworks und Sprachen
• Polyglot Teamstruktur
Bereitstellungsmodell Monolithische Bereitstellungen
• Bereitstellung einzelner Anwendungen
• Traditionelle Hostingmodelle
Containerisierte Bereitstellungen
• Kubernetes-Umgebungen
• Docker-Compose-Konfigurationen
• Dienstgitterarchitekturen
Operations Gekoppelte Authentifizierungsupdates
• Authentifizierungsänderungen erfordern eine Neuerstellung der App
• Gemeinsamer Lebenszyklus mit der Anwendung
Betriebliche Vorteile
• Unabhängige Skalierung der Authentifizierungslogik
• Trennen von Authentifizierungsupdates vom App-Code
• Zentrale Überwachung der Authentifizierung

Migrationsleitfaden

Migrieren von Microsoft. Identity.Web zum Microsoft Entra SDK für AgentID

In bestimmten Szenarien möchten Sie möglicherweise eine vorhandene .NET-Anwendung migrieren, die Microsoft.Identity.Web verwendet, um das Microsoft Entra SDK für die Agent-ID-Authentifizierung zu nutzen. Gründe für die Migration können die Einführung einer mehrsprachigen Architektur, die Standardisierung der Authentifizierung über Dienste hinweg oder das Verschieben in ein containerisiertes Bereitstellungsmodell umfassen.

Bevor Sie diese Änderung vornehmen, sind sorgfältige Überlegungen und Planung erforderlich. Dieser Abschnitt enthält einen allgemeinen Migrationspfad mit Codebeispielen, die Ihnen beim Übergang Ihrer Anwendung helfen.

Vorsicht

Microsoft empfiehlt nicht, von Microsoft.Identity.Web zum Microsoft Entra SDK für AgentID zu wechseln. Wenn Sie diese Änderung vornehmen möchten, zeigen die folgenden Beispiele ähnliche Konzepte in anderen Sprachen und Frameworks.

Schritt 1: Bereitstellen des SDK-Containers

Fügen Sie zuerst den SDK-Container zu Ihrem Pod hinzu:

# 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"

Schritt 2: Migrieren der Konfiguration

Übertragen Sie als Nächstes Ihre Konfiguration von appsettings.json in Umgebungsvariablen.

Vorher (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 / Umgebungsvariablen)

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"

Schritt 3: Aktualisieren des Anwendungscodes

Suchen Sie alle Instanzen von In-Process-Aufrufen zu Microsoft.Identity.Web und ersetzen Sie diese durch HTTP-Aufrufe an das Microsoft Entra SDK für Agent-ID-Endpunkte.

Vorher (C# with 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);
    }
}

Nach (Jede Sprache mit HTTP-Client)

Im folgenden Codeausschnitt werden Aufrufe des Microsoft Entra SDK für Agent-ID mithilfe des endpunkts /DownstreamApi angezeigt, um Benutzerdaten abzurufen. Beispiele werden in C# und TypeScript bereitgestellt.

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

Sie können dieselbe Logik in TypeScript wie folgt implementieren:

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

Schritt 4: Entfernen Microsoft. Identity.Web-Abhängigkeiten

Nachdem Sie die vorherigen Schritte abgeschlossen haben, bereinigen Sie Ihre Anwendung, indem Sie die NuGet-Pakete für Microsoft.Identity.Web aus Ihrem Projekt entfernen.

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

Wenn Sie weiterhin Token in Ihrer App überprüfen möchten, müssen Sie die ursprüngliche Authentifizierungskonfiguration nicht entfernen. Stattdessen können Sie die Überprüfung vollständig an das Microsoft Entra SDK für AgentID delegieren.

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

Schritt 5: Testen und Überprüfen

  1. Komponententests: Aktualisieren Sie Tests, um HTTP-Aufrufe des SDK zu modellieren.
  2. Integrationstests: Testen der SDK-Kommunikation in Staging.
  3. Leistungstests: Messen der AUSWIRKUNGEN auf den HTTP-Overhead.
  4. Sicherheitstests: Überprüfen der Tokenbehandlung und Netzwerkrichtlinien.

Leistungsüberlegungen

SDK-Aufwand

Das Microsoft Entra SDK für Agent-ID führt zu HTTP-Kommunikationsaufwand:

Leistungsfaktor Auswirkung Entschärfungsstrategie
Latency Ca. 1-5 ms pro Anforderung für die Localhost-Kommunikation Verwenden Sie HTTP/2, um den Verbindungsaufwand zu reduzieren.
Throughput Eingeschränkt durch HTTP-Verbindungspooling Implementieren Sie verbindungspooling, um HTTP-Verbindungen wiederzuverwenden.
Gedächtnis Zusätzlicher Speicheraufwand für Container Stellen Sie eine angemessene SDK-Ressourcenzuordnung sicher.
Effizienz anfordern Mehrere Roundtrips für komplexe Vorgänge Batchanforderungen zum Kombinieren mehrerer Vorgänge nach Möglichkeit.
Tokenleistung Wiederholter Tokenerwerbsaufwand Nutzen Sie den Tokencache des SDK für eine optimale Leistung.

In-Prozess-Leistung

Verwenden von Microsoft. Identity.Web hat einen minimalen Aufwand, da er innerhalb desselben Prozesses wie Ihre Anwendung ausgeführt wird. Es bietet systemeigene Methodenaufrufe mit Mikrosekundenlatenz und freigegebenem Prozessspeicher ohne HTTP-Einschränkungen. Wenn die Leistung kritisch ist, ist die Prozessintegration die optimale Wahl. Das Microsoft Entra SDK für das Flexibilitäts- und sprachunabhängige Design von AgentID kann jedoch in vielen Szenarien die Leistungsabwärmungen überwiegen.

In der folgenden Tabelle sind einige Leistungs- und Kostenvergleiche für die in-Prozess-Verwendung und die Verwendung des Microsoft Entra SDK für die Verwendung der Agent-ID (außerhalb des Prozesses) aufgeführt.

Kostenaspekte

Kostenfaktor Microsoft.Identity.Web (In-Process) Microsoft Entra SDK für Agenten-ID (Out-of-Process)
Berechnen Minimale zusätzliche CPU und Arbeitsspeicher im Anwendungsprozess Zusätzliche Containerressourcen pro Pod.
Network Kein zusätzlicher Aufwand Minimale localhost-Kommunikation.
Lagerung NuGet-Paketgröße (~10 MB) Containerimagespeicher.
Verwaltung Kein zusätzlicher Aufwand Container-Orchestrierungsaufwand.

Kostenbeispiel

Für 10 Replikate mit 128 MiB/100m SDK-Konfiguration:

Resource In Bearbeitung Microsoft Entra SDK für Agent-ID
Gedächtnis ~0 MB zusätzlich 10 × 128 MiB = 1,28 GB
CPU ~0% zusätzlich 10 × 100m = 1 Kern
Lagerung ~10 MB pro Bereitstellung Containerimagegröße pro Knoten

Support und Wartung

Aspekt Microsoft. Identity.Web Microsoft Entra SDK für Agent-ID
Updates NuGet-Paketupdates Updates von Containerimages
Umwälzende Änderungen Über Paketversionierung Über Container-Tags
Fehlerkorrekturen Kompilierungszeitintegration Laufzeit-Container-Updates
Sicherheitspatches Anwendung neu erstellen Container erneut bereitstellen
Dokumentation Umfangreiche .NET Dokumente Diese Dokumentation
Community Große .NET Community Wachsende Community

Hybridansatz

Sie können beide Ansätze innerhalb derselben Architektur kombinieren. Verwenden Sie Microsoft. Identity.Web für .NET-Dienste, die eine maximale Leistung erfordern, und das Microsoft Entra SDK für Agent-ID für Nicht-.NET-Dienste verwenden oder wenn Sie sprachunabhängige Authentifizierungsmuster benötigen. Diese Hybridstrategie hilft Ihnen, die Leistung zu optimieren, wo es wichtig ist, während sie Konsistenz und Flexibilität in Ihrem gesamten Dienstökosystem beibehalten.

Eine Beispielarchitektur lautet wie folgt:

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