Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Esta guía le ayuda a identificar las diferencias entre el SDK de Microsoft Entra para AgentID y la biblioteca Microsoft.Identity.Web en proceso para controlar la autenticación en las aplicaciones. La biblioteca Microsoft.Identity.Web se integra directamente en aplicaciones .NET para obtener el máximo rendimiento, mientras que el SDK de Microsoft Entra para AgentID se ejecuta como un contenedor independiente y admite cualquier lenguaje de programación a través de LAS API HTTP y elegir el enfoque correcto depende de la arquitectura, el lenguaje y el entorno de implementación de la aplicación.
Diferencias arquitectónicas
La diferencia fundamental radica en dónde se ejecuta la lógica de autenticación. Microsoft.Identity.Web se ejecuta dentro del proceso de aplicación, mientras que el SDK de Microsoft Entra para AgentID funciona como un servicio independiente junto con la aplicación. Esta elección arquitectónica afecta a factores como el flujo de trabajo de desarrollo y la complejidad operativa.
| Aspecto | Microsoft.Identity.Web (In-Process) | SDK de Microsoft Entra para AgentID (fuera de proceso) |
|---|---|---|
| Límite del proceso | Comparte el mismo proceso, memoria y ciclo de vida que la aplicación, lo que permite llamadas de método directo y configuración compartida. | Mantiene el aislamiento completo, la comunicación solo a través de las API HTTP y la administración de sus propios recursos de forma independiente |
| Acoplamiento de idioma | Acopla estrechamente la estrategia de autenticación a .NET, lo que requiere la experiencia de C# y el entorno de ejecución de .NET en todas partes donde necesite autenticación. | Desacopla la autenticación de la pila de tecnología de la aplicación, exponiendo una interfaz HTTP independiente del lenguaje que funciona igualmente bien con Python, Node.js, Go o cualquier lenguaje compatible con HTTP. |
| Modelo de implementación | Implementa como paquetes NuGet insertados en el binario de la aplicación, creando una unidad de implementación monolítica. | Se implementa como una imagen de contenedor independiente, lo que permite el control de versiones independiente, el escalado y las actualizaciones de la lógica de autenticación sin afectar al código de la aplicación. |
Microsoft.Identity.Web (In-Process)
Este fragmento de código muestra cómo microsoft.Identity.Web se integra directamente en una aplicación 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);
}
}
SDK de Microsoft Entra para AgentID (fuera de proceso)
Este fragmento de código muestra cómo llamar al SDK de Microsoft Entra para AgentID desde una aplicación de Node.js mediante HTTP. La llamada al punto de conexión del SDK maneja la obtención de /DownstreamApi tokens y las llamadas a la API de downstream, incluida la transferencia del token entrante para los flujos de OBO en el 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);
}
Comparación de características
| Característica | Microsoft.Identity.Web | SDK de Microsoft Entra para AgentID |
|---|---|---|
| Compatibilidad con idiomas | Solo C# o .NET | Cualquier lenguaje (HTTP) |
| Implementación | Biblioteca en proceso | Contenedor independiente |
| Adquisición de tokens | ✅ Direct MSAL.NET | ✅ A través de la API HTTP |
| Almacenamiento en caché de tokens | ✅ En memoria, ✅ distribuido | ✅ En memoria, ❌distribuido |
| Flujo de OBO | ✅ Compatibilidad nativa | ✅ A través del punto de conexión HTTP |
| Credenciales de cliente | ✅ Compatibilidad nativa | ✅ A través del punto de conexión HTTP |
| Identidad administrada | ✅ Compatibilidad directa | ✅ Compatibilidad directa |
| Identidades del agente | ✅ A través de extensiones | ✅ Parámetros de consulta |
| Validación de tokens | ✅ Middleware | ✅ /Validate endpoint |
| API de bajada | ✅ IDownstreamApi | ✅ Punto de conexión /DownstreamApi |
| Microsoft Graph | ✅ Integración del SDK de Graph | ⚠️ A través de DownstreamApi |
| Rendimiento | ⚡ En proceso (más rápido) | 🔄 Sobrecarga HTTP |
| Configuración |
appsettings.json y código |
appsettings.json y Variables de entorno |
| Depuración | ✅ Depuración estándar de .NET | ⚠️ Depuración de contenedores |
| Recarga activa | ✅ Recarga activa de .NET | ❌ Reinicio del contenedor |
| Actualizaciones de paquetes | 📦 Paquetes NuGet | 🐳 Imágenes de contenedor |
| Licencia | MIT | MIT |
Cuándo usar cada enfoque
Decidir entre Microsoft.Identity.Web y el SDK de Microsoft Entra para AgentID depende de los requisitos, la arquitectura y la estrategia de implementación de la aplicación. Dependiendo de sus necesidades, un enfoque puede ser más adecuado que el otro, y las siguientes directrices podrían ayudarle a tomar una decisión informada.
| Scenario | Microsoft.Identity.Web (In-Process) | SDK de Microsoft Entra para AgentID (fuera de proceso) |
|---|---|---|
| Pila de aplicaciones | Aplicaciones .NET exclusivamente • api web de ASP.NET Core • ASP.NET Core Web Apps • Servicios de trabajo de .NET • Aplicaciones Blazor • Aplicaciones de demonio |
Microservicios de varios lenguajes • Node.js, Python, Go, servicios de Java • Arquitecturas políglotas • servicios Non-.NET • Integración de sistemas heredados |
| Requisitos de rendimiento | El rendimiento es crítico • Escenarios de alto rendimiento • Operaciones sensibles a la latencia • Cada milisegundos cuenta |
Puede tolerar la sobrecarga HTTP • ~1-5 ms latencia adicional aceptable • Rendimiento no limitado por cuellos de botella en la autenticación |
| Necesidades de integración | Se requiere una integración profunda • Configuración de MSAL.NET personalizada • Acceso directo a las características de MSAL • Estrategias avanzadas de caché de tokens |
Integración estandarizada • API HTTP suficiente • Patrones de autenticación coherentes entre servicios |
| Experiencia de desarrollo | Desarrollo rápido • Creación rápida de prototipos • Recarga en caliente para el desarrollo • Depuración estándar de .NET |
Desarrollo basado en contenedores • Reinicio del contenedor para realizar cambios • Se requiere depuración de contenedores |
| Equipo y arquitectura | Conjunto de un solo idioma • Experiencia en equipo en C#/.NET • No hay requisitos de varios idiomas |
Diversidad tecnológica • Combinación de marcos y lenguajes • Estructura del equipo políglota |
| Modelo de implementación | Implementaciones monolíticas • Implementación de una sola aplicación • Modelos de hospedaje tradicionales |
Implementaciones en contenedores • Entornos de Kubernetes • Configuraciones de Docker Compose • Arquitecturas de malla de servicio |
| Operations | Actualizaciones de autenticación acopladas • Los cambios de autenticación requieren recompilación de aplicaciones • Ciclo de vida compartido con la aplicación |
Ventajas operativas • Escalado independiente de la lógica de autenticación • Separar las actualizaciones de autenticación del código de la aplicación • Supervisión centralizada de la autenticación |
Guía de migración
Migración de Microsoft.Identity.Web al SDK de Microsoft Entra para AgentID
En determinados escenarios, es posible que quiera migrar una aplicación .NET existente mediante Microsoft.Identity.Web para aprovechar microsoft Entra SDK para AgentID para la autenticación. Las razones para la migración podrían incluir la adopción de una arquitectura de varios lenguajes, la estandarización de la autenticación entre servicios o el traslado a un modelo de implementación en contenedor.
Es necesario tener en cuenta y planear cuidadosamente antes de hacerlo. En esta sección se proporciona una ruta de migración de alto nivel con ejemplos de código que le ayudarán a realizar la transición de la aplicación.
Precaución
Microsoft no recomienda pasar de Microsoft.Identity.Web al SDK de Microsoft Entra para AgentID, pero si eligió hacerlo, las siguientes son demostraciones de conceptos similares en otros lenguajes y marcos.
Paso 1: Implementación del contenedor del SDK
En primer lugar, deberá agregar el contenedor del 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"
Paso 2: Migración de la configuración
A continuación, deberá transferir su configuración de appsettings.json a variables de entorno.
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"
}
}
}
Después (Kubernetes ConfigMap/Variables de entorno)
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"
Paso 3: Actualizar código de aplicación
Busque todas las instancias de llamadas en proceso a Microsoft.Identity.Web y reemplácelas por llamadas HTTP al SDK de Microsoft Entra para puntos de conexión AgentID:
Antes (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);
}
}
Después (Cualquier lenguaje con el cliente HTTP):
En el fragmento de código siguiente, podemos ver llamadas al SDK de Microsoft Entra para AgentID mediante el /DownstreamApi punto de conexión para obtener datos de usuario. Se proporcionan ejemplos en C# y 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
La misma lógica se puede implementar en TypeScript de la siguiente manera:
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;
}
Paso 4: Eliminación de dependencias Microsoft.Identity.Web
Una vez completados los pasos anteriores, puede ordenar la aplicación quitando los paquetes NuGet usados por Microsoft.Identity.Web del proyecto:
<!-- 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 aún quiere validar tokens en la aplicación, no es necesario quitar completamente la configuración de autenticación original, aunque podría delegar la validación por completo en el SDK de Microsoft Entra para AgentID.
// Remove from Program.cs or Startup.cs
services.AddMicrosoftIdentityWebApiAuthentication(Configuration)
.EnableTokenAcquisitionToCallDownstreamApi()
.AddDownstreamApi("Graph", Configuration.GetSection("DownstreamApis:Graph"))
.AddInMemoryTokenCaches();
Paso 5: Probar y validar
- Pruebas unitarias: actualización de pruebas para simular llamadas HTTP al SDK
- Pruebas de integración: prueba de la comunicación del SDK en el almacenamiento provisional
- Pruebas de rendimiento: medir el impacto de la sobrecarga HTTP
- Pruebas de seguridad: validar el control de tokens y las directivas de red
Consideraciones de rendimiento
Sobrecarga del SDK
El SDK de Microsoft Entra para AgentID presenta una sobrecarga de comunicación HTTP:
| Factor de rendimiento | Impacto | Estrategia de mitigación |
|---|---|---|
| Latencia | ~1-5 ms por solicitud para comunicación con localhost | Uso de HTTP/2 para reducir la sobrecarga de conexión |
| Rendimiento | Limitado por la agrupación de conexiones HTTP | Implementación de la agrupación de conexiones para reutilizar conexiones HTTP |
| Memoria | Sobrecarga adicional de memoria del contenedor | Asegurarse de que la asignación de recursos del SDK sea adecuada |
| Eficiencia de la solicitud | Varios recorridos de ida y vuelta para operaciones complejas | Solicitudes por lotes para combinar varias operaciones siempre que sea posible |
| Rendimiento del token | Sobrecarga repetida de adquisición de tokens | Aprovechamiento de la caché de tokens del SDK para obtener un rendimiento óptimo |
rendimiento de In-Process
El uso de Microsoft.Identity.Web tiene una sobrecarga mínima, ya que se ejecuta dentro del mismo proceso que la aplicación, lo que proporciona llamadas de método nativas con latencia microsegunda y memoria de proceso compartida sin limitaciones HTTP. Cuando el rendimiento es crítico, la integración en proceso es la opción óptima, pero el SDK de Microsoft Entra para el diseño independiente del lenguaje y la flexibilidad de AgentID pueden superar las ventajas del rendimiento en muchos escenarios.
A continuación se muestran algunas comparaciones de rendimiento y costos para el uso en proceso y el uso de Microsoft Entra SDK para AgentID (fuera de proceso):
Consideraciones sobre costos
| Factor de costo | Microsoft.Identity.Web (In-Process) | SDK de Microsoft Entra para AgentID (fuera de proceso) |
|---|---|---|
| Proceso | Cpu y memoria adicionales mínimas en el proceso de aplicación | Recursos de contenedor adicionales por pod |
| Network | Sin sobrecarga adicional | Mínimo (comunicación de localhost) |
| Almacenamiento | Tamaño del paquete NuGet (~10 MB) | Almacenamiento de imágenes de contenedor |
| Administración | Sin sobrecarga adicional | Sobrecarga en la orquestación de contenedores |
Ejemplo de costo
Para 10 réplicas con configuración del SDK de 128Mi/100m:
| Resource | En proceso | SDK de Microsoft Entra para AgentID |
|---|---|---|
| Memoria | ~0 MB adicionales | 10 × 128Mi = 1,28 GB |
| CPU | ~0% adicional | 10 × 100m = 1 núcleo |
| Almacenamiento | ~10 MB por implementación | Tamaño de imagen de contenedor por nodo |
Soporte técnico y mantenimiento
| Aspecto | Microsoft.Identity.Web | SDK de Microsoft Entra para AgentID |
|---|---|---|
| Updates | Actualizaciones de paquetes NuGet | Actualizaciones de imagen de contenedor |
| Cambios importantes | A través del versionado de paquetes | Mediante etiquetas de contenedor |
| Correcciones de errores | Integración en tiempo de compilación | Actualizaciones del contenedor en tiempo de ejecución |
| Revisiones de seguridad | Recompilación de la aplicación | Volver a desplegar el contenedor |
| Documentación | Documentos extensos de .NET | Esta documentación |
| Community | Comunidad de .NET grande | Comunidad creciente |
Enfoque híbrido
Puede combinar ambos enfoques dentro de la misma arquitectura: use Microsoft.Identity.Web para servicios .NET que requieren un rendimiento máximo, al tiempo que aprovecha el SDK de Microsoft Entra para AgentID para non-.NET servicios o cuando se necesitan patrones de autenticación independientes del lenguaje. Esta estrategia híbrida le permite optimizar el rendimiento cuando es fundamental al tiempo que mantiene la coherencia y la flexibilidad en todo el ecosistema de servicios.
Una arquitectura de ejemplo sería la siguiente:
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
Pasos siguientes
- Guía de instalación : Implementación del SDK de Microsoft Entra para AgentID
- Referencia de configuración : configuración del SDK
- Escenarios : ejemplos prácticos
- Documentación de Microsoft.Identity.Web : información sobre la biblioteca en proceso