Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
- Unit test: aggiornare i test per simulare le chiamate HTTP all'SDK.
- Test di integrazione: verificare la comunicazione dell'SDK nell'ambiente di staging.
- Test delle prestazioni: misurare l'impatto dell'overhead HTTP.
- 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