Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Deze handleiding helpt u bij het identificeren van de verschillen tussen de Microsoft Entra SDK voor agent-id en de in-process Microsoft. Identity.Web library voor het afhandelen van verificatie in uw toepassingen. De Microsoft. Identity.Web library kan rechtstreeks worden geïntegreerd in .NET toepassingen voor maximale prestaties. De Microsoft Entra SDK voor agent-id wordt uitgevoerd als een afzonderlijke container en ondersteunt elke programmeertaal via HTTP-API's. Het kiezen van de juiste benadering is afhankelijk van de architectuur, taal en implementatieomgeving van uw toepassing.
Verschillen in architectuur
Het fundamentele verschil ligt in waar verificatielogica wordt uitgevoerd. Microsoft. Identity.Web wordt uitgevoerd binnen uw toepassingsproces. De Microsoft Entra SDK voor agent-id fungeert als een onafhankelijke service naast uw toepassing. Deze architectuurkeuze heeft invloed op factoren zoals ontwikkelingswerkstroom en operationele complexiteit.
| Kenmerk | Microsoft.Identity.Web (In-Process) | Microsoft Entra SDK voor Agent ID (Out-of-Process) |
|---|---|---|
| Procesgrens | Deelt hetzelfde proces, geheugen en levenscyclus als uw toepassing, waardoor directe methode-aanroepen en gedeelde configuratie mogelijk zijn | Onderhoudt volledige isolatie, communiceert alleen via HTTP-API's en beheert onafhankelijk van de eigen resources |
| Taalkoppeling | Koppelt uw authenticatiestrategie nauw aan .NET, waardoor C#-ervaring en de .NET-runtime overal vereist zijn waar u authenticatie nodig hebt. | Koppelt verificatie los van de technologiestack van uw toepassing, waarbij een taalagnostische HTTP-interface beschikbaar wordt gesteld die even goed werkt met Python, Node.js, Go of een taal die geschikt is voor HTTP |
| Implementatiemodel | Wordt geïmplementeerd als NuGet-pakketten die zijn ingesloten in uw binaire toepassing, waardoor een monolithische implementatie-eenheid wordt gemaakt | Wordt geïmplementeerd als een afzonderlijke containerimage, wat onafhankelijk versiebeheer, schalen en updates van de authenticatielogica mogelijk maakt zonder dat dit van invloed is op uw toepassingscode. |
Microsoft.Identity.Web (in-process)
Dit codefragment laat zien hoe Microsoft. Identity.Web kan rechtstreeks worden geïntegreerd in een ASP.NET Core-toepassing:
// 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 voor Agent ID (Out-of-Process)
Dit codefragment laat zien hoe u de Microsoft Entra SDK voor agent-id aanroept vanuit een Node.js-toepassing met behulp van HTTP. De aanroep naar het /DownstreamApi-eindpunt van de SDK verwerkt tokenverwerving en downstream API-aanroepen, inclusief het doorgeven van het binnenkomende token voor OBO-stromen in de Authorization header.
// 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);
}
Vergelijking van functies
| Eigenschap | Microsoft. Identity.Web | Microsoft Entra SDK voor Agent ID |
|---|---|---|
| Taalondersteuning | Alleen C# / .NET | Elke taal (HTTP) |
| Deployment | In-process-bibliotheek | Afzonderlijke container |
| Token ophalen | Direct MSAL.NET | Via HTTP-API |
| Token caching | In-geheugen, gedistribueerd | In-memory, gedistribueerd |
| OBO Flow | Systeemeigen ondersteuning | Via HTTP-eindpunt |
| Clientgegevens | Systeemeigen ondersteuning | Via HTTP-eindpunt |
| Beheeridentiteit | Directe ondersteuning | Directe ondersteuning |
| Agentidentiteiten | Met behulp van extensies | Parameters voor zoekopdrachten |
| Tokenvalidatie | Middleware | /Eindpunt valideren |
| Downstream-API | IDownstreamApi | /DownstreamApi-eindpunt |
| Microsoft Graph | Graph SDK-integratie | Via DownstreamApi |
| prestatie | Intern verwerkt (snelste) | HTTP-overhead |
| Configuration |
appsettings.json en code |
appsettings.json en omgevingsvariabelen |
| foutopsporing | Standaard .NET foutopsporing | Containeropsporing |
| Hot Reload | .NET Hot Reload | Container opnieuw opstarten |
| Pakkettenupdates | NuGet-pakketten | Containerafbeeldingen |
| Licentie | MIT | MIT |
Wanneer moet u elke benadering gebruiken
Kiezen tussen Microsoft. Identity.Web en de Microsoft Entra SDK voor agent-id zijn afhankelijk van de vereisten, architectuur en implementatiestrategie van uw toepassing. Afhankelijk van uw behoeften kan één benadering geschikter zijn dan de andere. De volgende richtlijnen kunnen u helpen bij het nemen van een weloverwogen beslissing.
| Scenario | Microsoft.Identity.Web (In-Process) | Microsoft Entra SDK voor Agent ID (Out-of-Process) |
|---|---|---|
| Toepassingsstack | .NET toepassingen uitsluitend • ASP.NET Core Web-APIs • ASP.NET Core Web Apps • .NET Worker Services • Blazor-toepassingen • Daemon-apps |
Microservices in meerdere talen • Node.js, Python, Go, Java services • Meertalige architecturen • Niet-.NET diensten • Integratie van verouderde systemen |
| Prestatie-vereisten | Prestaties zijn essentieel • Scenario's met hoge doorvoer • Latentiegevoelige bewerkingen • Elke milliseconden telt |
Kan HTTP-overhead tolereren • ~1-5 ms extra latentie acceptabel • Doorvoer wordt niet beperkt door authenticatie |
| Integratiebehoeften | Grondige integratie vereist • Aangepaste MSAL.NET configuratie • Directe toegang tot MSAL-functies • Geavanceerde strategieën voor tokencache |
Gestandaardiseerde integratie • HTTP-API voldoende • Consistente verificatiepatronen tussen services |
| Ontwikkelervaring | Snelle ontwikkeling • Snelle prototypen • Hot reload voor ontwikkeling • Standaard .NET foutopsporing |
Ontwikkeling op basis van containers • Container opnieuw opstarten voor wijzigingen • Debugging van container vereist |
| Team en architectuur | Stack met één taal • Teamexpertise in C#/.NET • Geen vereisten voor meerdere talen |
Diversiteit van technologie • Combinatie van frameworks en talen • Polyglot teamstructuur |
| Implementatiemodel | Monolithische implementaties • Implementatie van één toepassing • Traditionele hostingmodellen |
In containers geplaatste implementaties • Kubernetes-omgevingen • Installatie van Docker Compose • Service mesh architecturen |
| Operations | Gekoppelde authenticatie-updates • Verificatiewijzigingen vereisen opnieuw bouwen van apps • Gedeelde levenscyclus met toepassing |
Operationele voordelen • Onafhankelijk schalen van verificatielogica • Authenticatie-updates scheiden van app-code • Gecentraliseerde bewaking van authenticatie |
Migratierichtlijnen
Migreren van Microsoft.Identity.Web naar Microsoft Entra SDK for AgentID
In bepaalde scenario's wilt u mogelijk een bestaande .NET-toepassing migreren die gebruikmaakt van Microsoft. Identity.Web om gebruik te maken van de Microsoft Entra SDK voor agent-id voor verificatie. Redenen voor migratie kunnen bestaan uit het aannemen van een architectuur met meerdere talen, het standaardiseren van verificatie tussen services of het overstappen op een containerimplementatiemodel.
Zorgvuldige overwegingen en planning zijn vereist voordat u deze wijziging aanbrengt. Deze sectie bevat een migratiepad op hoog niveau met codevoorbeelden waarmee u uw toepassing kunt overstappen.
Waarschuwing
Microsoft raadt u niet aan om over te stappen van Microsoft. Identity.Web naar de Microsoft Entra SDK voor AgentID. Als u ervoor kiest om deze wijziging aan te brengen, laten de volgende voorbeelden vergelijkbare concepten in andere talen en frameworks zien.
Stap 1: SDK-container implementeren
Voeg eerst de SDK-container toe aan uw 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"
Stap 2: Configuratie migreren
Breng vervolgens uw configuratie over van appsettings.json naar omgevingsvariabelen:
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"
}
}
}
Na (Kubernetes ConfigMap en omgevingsvariabelen)
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"
Stap 3: toepassingscode bijwerken
Zoek alle exemplaren van in-process aanroepen naar Microsoft.Identity.Web en vervang deze door HTTP-aanroepen naar de Microsoft Entra SDK voor Agent-ID-eindpunten.
Voor (C# met 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);
}
}
Na (elke taal met HTTP-client):
In het volgende codefragment ziet u aanroepen naar de Microsoft Entra SDK voor agent-id met behulp van het /DownstreamApi-eindpunt om gebruikersgegevens op te halen. Voorbeelden worden gegeven in C# en 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
U kunt dezelfde logica in TypeScript als volgt implementeren:
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;
}
Stap 4: verwijder Microsoft. Identity.Web-afhankelijkheden
Nadat u de vorige stappen hebt voltooid, moet u uw toepassing opgeruimd maken door de NuGet-pakketten voor Microsoft te verwijderen. Identity.Web vanuit uw project:
<!-- Remove these from .csproj -->
<PackageReference Include="Microsoft.Identity.Web" Version="..." />
<PackageReference Include="Microsoft.Identity.Web.MicrosoftGraph" Version="..." />
<PackageReference Include="Microsoft.Identity.Web.DownstreamApi" Version="..." />
Als u nog steeds tokens in uw app wilt valideren, hoeft u de oorspronkelijke verificatieconfiguratie niet te verwijderen. In plaats daarvan kunt u validatie volledig delegeren aan de Microsoft Entra SDK voor AgentID.
// Remove from Program.cs or Startup.cs
services.AddMicrosoftIdentityWebApiAuthentication(Configuration)
.EnableTokenAcquisitionToCallDownstreamApi()
.AddDownstreamApi("Graph", Configuration.GetSection("DownstreamApis:Graph"))
.AddInMemoryTokenCaches();
Stap 5: Testen en valideren
- Eenheidstests: Werk tests bij om HTTP-aanroepen naar de SDK te mocken.
- Integratietests: Test SDK-communicatie in de staging-omgeving.
- Prestatietests: De impact van HTTP-overhead meten.
- Beveiligingstests: tokenafhandeling en netwerkbeleid valideren.
Prestatie-overwegingen
SDK overhead
De Microsoft Entra SDK voor agent-id introduceert overhead voor HTTP-communicatie:
| Prestatiefactor | Impact | Strategie voor risicobeperking |
|---|---|---|
| Latency | Ongeveer 1-5 ms per aanvraag voor localhost-communicatie | Gebruik HTTP/2 om de overhead van de verbinding te verminderen. |
| Throughput | Beperkt door HTTP-verbindingspooling | Implementeer groepsgewijze verbindingen om HTTP-verbindingen opnieuw te gebruiken. |
| Memory | Extra overhead voor containergeheugen | Zorg ervoor dat er voldoende SDK-resourcetoewijzing is. |
| Efficiëntie van aanvragen | Meerdere rondreizen voor complexe operaties | Batchaanvragen om meerdere bewerkingen te combineren, indien mogelijk. |
| Tokenprestaties | Overhead voor herhaalde tokenovername | Maak gebruik van de tokencache van de SDK voor optimale prestaties. |
In-procesprestaties
Met Microsoft.Identity.Web heeft u minimale overhead omdat deze binnen hetzelfde proces als uw toepassing wordt uitgevoerd. Het biedt systeemeigen methodeaanroepen met microsecondenlatentie en gedeeld procesgeheugen zonder HTTP-beperkingen. Wanneer de prestaties essentieel zijn, is integratie in proces de optimale keuze. De Microsoft Entra SDK voor het flexibiliteits- en taalagnostische ontwerp van AgentID kan echter in veel scenario's opwegen tegen de prestaties.
In de volgende tabel worden enkele prestatie- en kostenvergelijkingen weergegeven voor gebruik in proces en Microsoft Entra SDK voor gebruik van agent-id's (out-of-process):
Kostenoverwegingen
| Kostenfactor | Microsoft.Identity.Web (In-Process) | Microsoft Entra SDK voor Agent ID (Out-of-Process) |
|---|---|---|
| Berekenen | Minimale extra CPU en geheugen in het toepassingsproces | Extra containerbronsmiddelen per pod. |
| Network | Geen extra overhead | Minimale localhost-communicatie. |
| Opslag | NuGet-pakketgrootte (~10 MB) | Opslag van containerbeelden. |
| Beheer | Geen extra overhead | Overhead voor containerindeling. |
Voorbeeld van kosten
Voor 10 replica's met 128 MiB/100m SDK-configuratie:
| Hulpbron | In behandeling | Microsoft Entra SDK voor Agent ID |
|---|---|---|
| Memory | ongeveer 0 MB extra | 10 × 128 MiB = 1,28 GB |
| CPU | ~0% aanvullend | 10 × 100m = 1 kern |
| Opslag | ~10 MB per implementatie | De grootte van de container-image per knooppunt |
Ondersteuning en onderhoud
| Kenmerk | Microsoft. Identity.Web | Microsoft Entra SDK voor Agent ID |
|---|---|---|
| Updates | NuGet-pakketupdates | Updates van containerafbeeldingen |
| Belangrijke wijzigingen | Via pakketversiebeheer | Via containertags |
| Foutoplossingen | Compileertijdintegratie | Runtimecontainerupdates |
| Beveiligingspatches | Toepassing opnieuw opbouwen | Container opnieuw implementeren |
| Documentatie | Uitgebreide .NET documenten | Deze documentatie |
| Community | Grote .NET community | Groeiende gemeenschap |
Hybride benadering
U kunt beide benaderingen in dezelfde architectuur combineren. Gebruik Microsoft. Identity.Web voor .NET-services waarvoor maximale prestaties zijn vereist, en gebruik de Microsoft Entra SDK voor agent-id voor niet-.NET-services of wanneer u taalagnostische verificatiepatronen nodig hebt. Met deze hybride strategie kunt u de prestaties optimaliseren waarbij het essentieel is, terwijl consistentie en flexibiliteit in uw hele service-ecosysteem behouden blijft.
Een voorbeeldarchitectuur is als volgt:
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