Jämförelse: Microsoft Entra SDK för agent-ID jämfört med In-Process Microsoft. Identity.Web

Den här guiden hjälper dig att identifiera skillnaderna mellan Microsoft Entra SDK för agent-ID och den pågående Microsoft. Identity.Web-bibliotek för hantering av autentisering i dina program. Microsoft. Identity.Web-biblioteket integreras direkt i .NET program för maximal prestanda. Microsoft Entra SDK för agent-ID körs som en separat container och stöder alla programmeringsspråk via HTTP-API:er. Om du väljer rätt metod beror det på programmets arkitektur, språk och distributionsmiljö.

Arkitekturskillnader

Den grundläggande skillnaden ligger i var autentiseringslogik körs. Microsoft. Identity.Web körs i din programprocess. Microsoft Entra SDK för agent-ID fungerar som en oberoende tjänst tillsammans med ditt program. Det här arkitekturvalet påverkar faktorer som utvecklingsarbetsflöde och driftskomplexitet.

Aspekt Microsoft.Identity.Web (In-Process) Microsoft Entra SDK för Agent-ID (Out-of-Process)
Processgräns Delar samma process, minne och livscykel som ditt program, vilket möjliggör direkta metodanrop och delad konfiguration Upprätthåller fullständig isolering, kommunicerar endast via HTTP-API:er och hanterar sina egna resurser oberoende av varandra
Språkkoppling Knyter din autentiseringsstrategi nära till .NET, vilket kräver C#-erfarenhet och att .NET-miljön körs överallt där autentisering krävs. Frikoppla autentisering från programmets teknikstack och exponera ett språkoberoende HTTP-gränssnitt som fungerar lika bra med Python, Node.js, Go eller något HTTP-kompatibelt språk
Distributionsmodell Distribuerar som NuGet-paket inbäddade i din programbinärfil och skapar en monolitisk distributionsenhet Distribueras som en separat containeravbildning, vilket möjliggör oberoende versionshantering, skalning och uppdateringar av autentiseringslogik utan att påverka programkoden

Microsoft.Identity.Web (pågående)

Det här kodfragmentet visar hur Microsoft. Identity.Web integreras direkt i ett ASP.NET Core program:

// 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 (out-of-process)

Det här kodfragmentet visar hur du anropar Microsoft Entra SDK för agent-ID från ett Node.js program med HTTP. Anropet till SDK:s /DownstreamApi-slutpunkt hanterar tokenförvärv och nedströms API-anrop, inklusive att vidarebefordra den inkommande token för OBO-flöden i Authorization huvud.

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

Jämförelse av funktioner

Egenskap Microsoft. Identity.Web Microsoft Entra SDK för agent-ID
Språkstöd Endast C#/.NET Valfritt språk (HTTP)
Deployment I-processbibliotek Separat behållare
Tokenförvärv Direkt MSAL.NET Via HTTP-API
Token-cachelagring Minnesintern, distribuerad Minnesintern, distribuerad
OBO-flöde Internt stöd Via HTTP-slutpunkt
Klientautentiseringsuppgifter Internt stöd Via HTTP-slutpunkt
Hanterad identitet Direktstöd Direktstöd
Agentidentiteter Via tillägg Frågeparametrar
Tokenverifiering Mellanmjukvara /Verifiera slutpunkt
Nedströms-API IDownstreamApi /DownstreamApi-slutpunkt
Microsoft Graph Graph SDK-integrering Via DownstreamApi
Föreställning Pågående (snabbast) HTTP-omkostnader
Configuration appsettings.json och kod appsettings.json och miljövariabler
felsökning Standardfelsökning för .NET Felsökning av containrar
Hot Reload .NET Hot Reload Omstart av container
Paketuppdateringar NuGet-paket Containeravbildningar
Licens MIT MIT

När du ska använda varje metod

Beslutar mellan Microsoft. Identity.Web och Microsoft Entra SDK för agent-ID beror på programmets krav, arkitektur och distributionsstrategi. Beroende på dina behov kan en metod vara lämpligare än den andra. Följande riktlinjer kan hjälpa dig att fatta ett välgrundat beslut.

Scenario Microsoft.Identity.Web (In-Process) Microsoft Entra SDK för Agent-ID (Out-of-Process)
Programstacken .NET-applikationer exklusivt
• ASP.NET Core webb-API:er
• ASP.NET Core Web Apps
• .NET Worker Services
• Blazor-applikationer
• Daemon-appar
Mikrotjänster med flera språk
• Node.js, Python, Go, Java tjänster
• Flerspråkiga arkitekturer
• Tjänster som inte är .NET
• Integrering av äldre system
Prestandakrav Prestanda är kritiskt
• Scenarier med högt dataflöde
• Svarstidskänsliga åtgärder
• Varje millisekunder räknas
Kan tolerera HTTP-omkostnader
• ~1–5 ms ytterligare svarstid accepteras
• Dataflödet är inte flaskhalsat av autentisering
Integrationsbehov Djupintegrering krävs
• Anpassad MSAL.NET konfiguration
• Direktåtkomst till MSAL-funktioner
• Strategier för avancerad tokencache
Standardiserad integrering
• HTTP API:et är tillräckligt
• Konsekventa autentiseringsmönster mellan tjänster
Utvecklingsupplevelse Snabb utveckling
• Snabb prototyper
• Snabb återladdning för utveckling
• Felsökning av standard .NET
Containerbaserad utveckling
• Omstart av container för ändringar
• Felsökning av containrar krävs
Team och arkitektur Ettspråks-stack
• Teamexpertis inom C#/.NET
• Inga krav på flera språk
Teknikdiversitet
• Blandning av ramverk och språk
• Flerspråkig teamstruktur
Distributionsmodell Monolitiska distributioner
• Distribution av enskilda program
• Traditionella värdmodeller
Containerbaserade distributioner
• Kubernetes-miljöer
• Docker Compose-installationer
• Service Mesh-arkitekturer
Operations Kopplade autentiseringsuppdateringar
• Autentiseringsändringar kräver att appen återskapas
• Delad livscykel med program
Driftfördelar
• Oberoende skalning av autentiseringslogik
• Separera autentiseringsuppdateringar från appkod
• Centraliserad övervakning av autentisering

Vägledning för migrering

Migrera från Microsoft. Identity.Web till Microsoft Entra SDK för AgentID

I vissa scenarier kanske du vill migrera ett befintligt .NET program som använder Microsoft. Identity.Web för att utnyttja Microsoft Entra SDK för agent-ID för autentisering. Orsaker till migreringen kan vara att införa en arkitektur med flera språk, standardisera autentisering mellan tjänster eller flytta till en containerbaserad distributionsmodell.

Noggrant övervägande och planering krävs innan du gör den här ändringen. Det här avsnittet innehåller en övergripande migreringssökväg med kodexempel som hjälper dig att överföra ditt program.

Försiktighet

Microsoft rekommenderar inte att du flyttar från Microsoft. Identity.Web till Microsoft Entra SDK för AgentID. Om du väljer att göra den här ändringen visar följande exempel liknande begrepp i andra språk och ramverk.

Steg 1: Distribuera SDK-container

Lägg först till SDK-containern i podden:

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

Steg 2: Migrera konfiguration

Överför sedan konfigurationen från appsettings.json till miljövariabler:

Före (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"
    }
  }
}

Efter (Kubernetes ConfigMap/Miljövariabler)

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"

Steg 3: Uppdatera programkoden

Leta upp alla instanser av pågående anrop till Microsoft. Identity.Web och ersätt dem med HTTP-anrop till Microsoft Entra SDK för agent-ID-slutpunkter:

Före (C# med 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);
    }
}

Efter (valfritt språk med HTTP-klient):

I följande kodsnutt visas anrop till Microsoft Entra SDK för att använda agent-ID med hjälp av slutpunkten /DownstreamApi för att hämta användardata. Exempel finns i C# och 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

Du kan implementera samma logik i TypeScript på följande sätt:

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

Steg 4: Ta bort Microsoft. Identity.Web-beroenden

När du har slutfört föregående steg kan du städa programmet genom att ta bort NuGet-paketen för Microsoft. Identity.Web från projektet:

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

Om du fortfarande vill verifiera token i din app behöver du inte ta bort den ursprungliga autentiseringskonfigurationen. I stället kan du delegera valideringen helt till Microsoft Entra SDK för AgentID.

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

Steg 5: Testa och verifiera

  1. Enhetstester: Uppdatera tester för att simulera HTTP-anrop till SDK:t.
  2. Integreringstester: Testa SDK-kommunikation i stagingmiljö.
  3. Prestandatester: Mät påverkan på HTTP-omkostnader.
  4. Säkerhetstester: Verifiera tokenhantering och nätverksprinciper.

Prestandaöverväganden

Omkostnader för SDK

Microsoft Entra SDK för agent-ID introducerar HTTP-kommunikationskostnader:

Prestandafaktor Påverkan Strategi för minskning
Latency Cirka 1–5 ms per begäran för localhost-kommunikation Använd HTTP/2 för att minska anslutningskostnaderna.
Throughput Begränsas av HTTP-anslutningspooler Implementera anslutningspooler för att återanvända HTTP-anslutningar.
Minne Extra kostnader för containerminne Se till att SDK-resursallokeringen är tillräcklig.
Begärandeeffektivitet Flera rundresor för komplexa åtgärder Batchförfrågningar för att kombinera flera åtgärder när det är möjligt.
Tokenprestanda Omkostnader för upprepade tokenförvärv Använd SDK:s tokencache för optimala prestanda.

Processintern prestanda

Använda Microsoft. Identity.Web har minimala omkostnader eftersom det körs inom samma process som ditt program. Den tillhandahåller inbyggda metodanrop med mikrosekunders svarstid och delat processminne utan HTTP-begränsningar. När prestanda är kritiskt är processintegrering det optimala valet. Men Microsoft Entra SDK för AgentID:s flexibilitet och språkagnostiska design kan uppväga prestandavägningarna i många scenarier.

I följande tabell visas några prestanda- och kostnadsjämförelser för användning i processen och Microsoft Entra SDK för agent-ID-användning (out-of-process):

Kostnadsöverväganden

Kostnadsfaktor Microsoft.Identity.Web (In-Process) Microsoft Entra SDK för agent-ID (out-of-process)
Beräkning Minimal ytterligare processor och minne i programprocessen Ytterligare containerresurser per pod.
Network Inga ytterligare omkostnader Minimal localhost-kommunikation.
Förvaring NuGet-paketstorlek (~10 MB) Lagring av containeravbildningar.
Förvaltning Inga ytterligare omkostnader Omkostnader för containerorkestrering.

Kostnadsexempel

För 10 repliker med 128 MiB/100m SDK-konfiguration:

Resource I processen Microsoft Entra SDK för agent-ID
Minne ~0 MB ytterligare 10 × 128 MiB = 1,28 GB
CPU ~0% ytterligare 10 × 100m = 1 kärna
Förvaring ~10 MB per driftsättning Containeravbildningsstorlek per nod

Support och underhåll

Aspekt Microsoft. Identity.Web Microsoft Entra SDK för agent-ID
Updates NuGet-paketuppdateringar Uppdateringar av containeravbildningar
Icke-bakåtkompatibla ändringar Via paketversionshantering Via containertaggar
Felkorrigeringar Kompileringstidsintegration Uppdateringar av körmiljökontainer
Säkerhetskorrigeringar Återskapa program Distribuera om containern
Dokumentation Omfattande .NET-dokumentation Den här dokumentationen
Community Stor .NET-gemenskap Växande gemenskap

Hybridmetod

Du kan kombinera båda metoderna i samma arkitektur. Använd Microsoft. Identity.Web för .NET tjänster som kräver maximal prestanda och använder Microsoft Entra SDK för agent-ID för icke-.NET tjänster eller när du behöver språkagnostiska autentiseringsmönster. Den här hybridstrategin hjälper dig att optimera prestanda där den är kritisk och samtidigt upprätthålla konsekvens och flexibilitet i hela tjänstekosystemet.

Ett exempel på en arkitektur är följande:

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