Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce guide vous aide à identifier les différences entre le SDK Microsoft Entra pour l'ID d'agent et la bibliothèque Microsoft.Identity.Web en cours de traitement pour la gestion de l'authentification dans vos applications. La bibliothèque Microsoft.Identity.Web s’intègre directement aux applications .NET pour des performances maximales. Le sdk Microsoft Entra pour l’ID d’agent s’exécute en tant que conteneur distinct et prend en charge n’importe quel langage de programmation via des API HTTP. Le choix de l’approche appropriée dépend de l’architecture, du langage et de l’environnement de déploiement de votre application.
Différences architecturales
La différence fondamentale réside dans l’exécution de la logique d’authentification. Microsoft. Identity.Web s’exécute dans votre processus d’application. Le sdk Microsoft Entra pour l’ID d’agent fonctionne en tant que service indépendant en même temps que votre application. Ce choix architectural a un impact sur des facteurs tels que le flux de travail de développement et la complexité opérationnelle.
| Aspect | Microsoft.Identity.Web (In-Process) | Microsoft Entra SDK pour l’ID de l’agent (hors processus) |
|---|---|---|
| Limite de processus | Partage le même processus, la mémoire et le cycle de vie que votre application, en activant les appels de méthode directe et la configuration partagée | Maintient l’isolation complète, la communication uniquement par le biais d’API HTTP et la gestion de ses propres ressources indépendamment |
| Couplage linguistique | Couple étroitement votre stratégie d’authentification pour .NET, nécessitant une expérience C# et .NET runtime partout où vous avez besoin d’authentification | Dissocie l'authentification de la pile technologique de votre application, exposant une interface HTTP indépendante du langage qui fonctionne également bien avec Python, Node.js, Go ou tout langage compatible HTTP |
| Modèle de déploiement | Déploie en tant que packages NuGet incorporés dans votre fichier binaire d’application, créant une unité de déploiement monolithique | Déploie en tant qu’image conteneur distincte, en activant le contrôle de version indépendant, la mise à l’échelle et les mises à jour de la logique d’authentification sans impact sur le code de votre application |
Microsoft.Identity.Web (in-process)
Cet extrait de code montre comment Microsoft. Identity.Web s’intègre directement dans une application 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 pour l’ID de l’agent (hors processus)
Cet extrait de code montre comment appeler le KIT de développement logiciel (SDK) Microsoft Entra pour l’ID de l’agent à partir d’une application Node.js à l’aide de HTTP. L'appel à l'endpoint du SDK gère l'acquisition de jetons /DownstreamApi et les appels d'API en aval, y compris la transmission du jeton entrant pour les flux OBO dans l'en-tête 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);
}
Comparaison des fonctionnalités
| Caractéristique | Microsoft. Identity.Web | Microsoft Entra SDK pour l’ID d’agent |
|---|---|---|
| Prise en charge linguistique | C# / .NET uniquement | N’importe quelle langue (HTTP) |
| Déploiement | Bibliothèque en cours de traitement | Conteneur distinct |
| Acquisition de jetons | MSAL.NET Direct | Via l’API HTTP |
| Mise en cache des jetons | En mémoire distribuée | En mémoire distribuée |
| Flux OBO | Prise en charge native | Via le point de terminaison HTTP |
| Informations d’identification du client | Prise en charge native | Via le point de terminaison HTTP |
| Identité gérée | Prise en charge directe | Prise en charge directe |
| Identités d’agent | Via des extensions | Paramètres de requête |
| Validation de jeton | Intergiciel | /Valider le point de terminaison |
| API en aval | IDownstreamApi | Point de terminaison /DownstreamApi |
| Microsoft Graph | Intégration du Kit de développement logiciel (SDK) Graph | Via DownstreamApi |
| Niveau de performance | En cours (le plus rapide) | Charge additionnelle HTTP |
| Configuration |
appsettings.json et code |
appsettings.json et variables d’environnement |
| Débogage | Débogage standard de .NET | Débogage de conteneur |
| Rechargement à chaud | .NET Rechargement à chaud | Redémarrage du conteneur |
| Mises à jour de package | Les packages NuGet | Images de conteneur |
| Licence | MIT | MIT |
Quand utiliser chaque approche
Choix entre Microsoft. Identity.Web et le sdk Microsoft Entra pour l'ID d'agent dépendent des exigences, de l'architecture et de la stratégie de déploiement de votre application. Selon vos besoins, une approche peut être plus appropriée que l’autre. Les instructions suivantes peuvent vous aider à prendre une décision éclairée.
| Scénario | Microsoft.Identity.Web (In-Process) | Microsoft Entra SDK pour l’ID de l’agent (hors processus) |
|---|---|---|
| Pile d’applications | applications .NET exclusivement • API web ASP.NET Core • ASP.NET Core Web Apps • Services Worker .NET • Applications Blazor • Applications démon |
Microservices multi-langages • Node.js, Python, Go, Java services • Architectures polyglottes • Services non .NET • Intégration de systèmes hérités |
| Exigences en matière de performances | Les performances sont critiques • Scénarios à débit élevé • Opérations sensibles à la latence • Chaque milliseconde compte |
Peut tolérer la surcharge HTTP • ~1 à 5 ms de latence supplémentaire acceptable • Débit non limité par l'authentification |
| Besoins d’intégration | Intégration approfondie requise • Configuration MSAL.NET personnalisée • Accès direct aux fonctionnalités MSAL • Stratégies avancées de cache de jetons |
Intégration standardisée • API HTTP suffisante • Modèles d’authentification cohérents entre les services |
| Expérience de développement | Développement rapide • Prototypage rapide • Rechargement à chaud pour le développement • Débogage de .NET standard |
Développement basé sur des conteneurs • Redémarrage du conteneur pour les modifications • Débogage de conteneur requis |
| Team &Architecture | Pile technologique monolingue • Expertise en équipe en C#/.NET • Aucune exigence multilingue |
Diversité technologique • Combinaison de frameworks et de langages • Structure d’équipe polyglotte |
| Modèle de déploiement | Déploiements monolithiques • Déploiement d’une seule application • Modèles d’hébergement traditionnels |
Déploiements en conteneur • Environnements Kubernetes • Configuration de Docker Compose • Architectures de maillage de service |
| Operations | Mises à jour d’authentification couplées • Les modifications d’authentification nécessitent la reconstruction de l’application • Cycle de vie partagé avec l’application |
Avantages opérationnels • Mise à l’échelle indépendante de la logique d’authentification • Séparer les mises à jour d’authentification du code d’application • Surveillance centralisée de l’authentification |
Conseils sur la migration
Migration de Microsoft.Identity.Web vers Microsoft Entra SDK pour AgentID
Dans certains scénarios, vous pouvez migrer une application .NET existante qui utilise Microsoft. Identity.Web pour tirer parti du sdk Microsoft Entra pour l’ID d’agent pour l’authentification. Les raisons de la migration peuvent inclure l’adoption d’une architecture multi-langage, la normalisation de l’authentification entre les services ou le passage à un modèle de déploiement conteneurisé.
Une considération et une planification minutieuses sont requises avant d’apporter cette modification. Cette section fournit un chemin de migration de haut niveau avec des exemples de code pour vous aider à migrer votre application.
Caution
Microsoft ne recommande pas de passer de Microsoft. Identity.Web vers le Kit de développement logiciel (SDK) Microsoft Entra pour AgentID. Si vous choisissez d’apporter cette modification, les exemples suivants illustrent des concepts similaires dans d’autres langages et infrastructures.
Étape 1 : Déployer un conteneur sdk
Tout d’abord, ajoutez le conteneur du Kit de développement logiciel (SDK) à votre 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"
Étape 2 : Migrer la configuration
Ensuite, transférez votre configuration de appsettings.json vers les variables d’environnement :
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"
}
}
}
After (Kubernetes ConfigMap / Variables d’environnement)
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"
Étape 3 : Mettre à jour le code de l’application
Recherchez toutes les instances d’appels in-process vers Microsoft.Identity.Web et remplacez-les par des appels HTTP vers le SDK Microsoft Entra pour les points de terminaison de l'ID d'agent.
Avant (C# avec 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);
}
}
Après (n’importe quelle langue avec le client HTTP) :
Dans l'extrait de code suivant, vous voyez des appels au SDK Microsoft Entra pour l'ID de l'agent en utilisant le point de terminaison /DownstreamApi pour obtenir des données utilisateur. Des exemples sont fournis en C# et 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
Vous pouvez implémenter la même logique dans TypeScript comme suit :
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;
}
Étape 4 : Supprimer les dépendances Microsoft.Identity.Web
Une fois les étapes précédentes terminées, nettoyez votre application en supprimant les packages NuGet pour Microsoft.Identity.Web à partir de votre projet.
<!-- Remove these from .csproj -->
<PackageReference Include="Microsoft.Identity.Web" Version="..." />
<PackageReference Include="Microsoft.Identity.Web.MicrosoftGraph" Version="..." />
<PackageReference Include="Microsoft.Identity.Web.DownstreamApi" Version="..." />
Si vous souhaitez toujours valider des jetons dans votre application, vous n’avez pas besoin de supprimer la configuration d’authentification d’origine. Au lieu de cela, vous pouvez déléguer entièrement la validation au SDK Microsoft Entra pour AgentID.
// Remove from Program.cs or Startup.cs
services.AddMicrosoftIdentityWebApiAuthentication(Configuration)
.EnableTokenAcquisitionToCallDownstreamApi()
.AddDownstreamApi("Graph", Configuration.GetSection("DownstreamApis:Graph"))
.AddInMemoryTokenCaches();
Étape 5 : Tester et valider
- Tests unitaires : Mettez à jour les tests pour simuler des appels HTTP au Kit de développement logiciel (SDK).
- Tests d’intégration : Tester la communication du Kit de développement logiciel (SDK) en préproduction.
- Tests de performances : mesurez l’impact de la surcharge HTTP.
- Tests de sécurité : Valider la gestion des jetons et les stratégies réseau.
Considérations relatives aux performances
Surcharge du Kit de développement logiciel (SDK
Le SDK Microsoft Entra pour l’ID d’agent introduit la surcharge de communication HTTP :
| Facteur de performance | Impact | Stratégie d’atténuation |
|---|---|---|
| Latency | Environ 1 à 5 ms par demande de communication localhost | Utilisez HTTP/2 pour réduire la surcharge de connexion. |
| Throughput | Limité par le regroupement de connexions HTTP | Implémentez le regroupement de connexions pour réutiliser les connexions HTTP. |
| Mémoire | Surcharge supplémentaire de mémoire du conteneur | Assurez-vous que l’allocation de ressources du Kit de développement logiciel (SDK) est adéquate. |
| Efficacité des demandes | Allers-retours multiples pour les opérations complexes | Demandes de traitement par lots pour combiner plusieurs opérations lorsque cela est possible. |
| Performances des jetons | Surcharge récurrente lors de l'acquisition de jetons | Tirez parti du cache de jetons du Kit de développement logiciel (SDK) pour optimiser les performances. |
Performance en cours
Utilisation de Microsoft. Identity.Web a une surcharge minimale, car elle s’exécute dans le même processus que votre application. Il fournit des appels de méthode natifs avec une latence microseconde et une mémoire de processus partagé sans limitations HTTP. Lorsque les performances sont critiques, l’intégration in-process est le choix optimal. Toutefois, la flexibilité et la conception indépendante du langage de Microsoft Entra SDK pour AgentID peuvent être préférées aux compromis sur la performance dans de nombreux scénarios.
Le tableau suivant présente des comparaisons de performances et de coûts pour l’utilisation in-process et Microsoft Entra SDK pour l’utilisation de l’ID d’agent (hors processus) :
Considérations relatives aux coûts
| Facteur de coût | Microsoft. Identity.Web (In-Process) | Microsoft Entra SDK pour l’ID de l’agent (hors processus) |
|---|---|---|
| Calculer | Processeur et mémoire minimaux supplémentaires dans le processus d'application | Ressources de conteneur supplémentaires par pod. |
| Network | Aucune surcharge supplémentaire | Communication minimale avec localhost. |
| Stockage | Taille du package NuGet (~10 Mo) | Stockage de conteneurs d'images. |
| Gestion | Aucune surcharge supplémentaire | Surcharge d’orchestration de conteneur. |
Exemple de coût
Pour 10 réplicas avec 128 Mio/100m de configuration SDK :
| Resource | En cours | Microsoft Entra SDK pour l’ID d’agent |
|---|---|---|
| Mémoire | ~0 Mo supplémentaires | 10 × 128 Mio = 1,28 Go |
| CPU | ~0% en plus | 10 × 100m = 1 cœur |
| Stockage | ~10 Mo par déploiement | Taille de l’image de conteneur par nœud |
Support et maintenance
| Aspect | Microsoft. Identity.Web | Microsoft Entra SDK pour l’ID d’agent |
|---|---|---|
| Updates | Mises à jour du package NuGet | Mises à jour de l'image du conteneur |
| Changements importants | Via le versionnage du paquet | Via des balises de conteneur |
| Résolution de bogues | Intégration au moment de la compilation | Mises à jour du conteneur d’exécution |
| Correctifs de sécurité | Reconstruire l’application | Redéployer le conteneur |
| Documentation | Documentation complète .NET | Cette documentation |
| Community | Grande communauté .NET | Communauté croissante |
Approche hybride
Vous pouvez combiner les deux approches dans la même architecture. Utilisez Microsoft. Identity.Web pour les services .NET qui nécessitent des performances maximales et qui utilisent le KIT de développement logiciel (SDK) Microsoft Entra pour l’ID d’agent pour les services non .NET ou lorsque vous avez besoin de modèles d’authentification indépendant de la langue. Cette stratégie hybride vous permet d’optimiser les performances où il est essentiel tout en conservant la cohérence et la flexibilité dans l’ensemble de votre écosystème de services.
Voici un exemple d’architecture :
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