Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
- Enhetstester: Uppdatera tester för att simulera HTTP-anrop till SDK:t.
- Integreringstester: Testa SDK-kommunikation i stagingmiljö.
- Prestandatester: Mät påverkan på HTTP-omkostnader.
- 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