Identidad administrada con MSAL.NET

Note

Esta característica está disponible a partir de MSAL.NET versión 4.54.0.

Un desafío común para los desarrolladores es la administración de secretos, credenciales, certificados y claves que se usan para proteger la comunicación entre los servicios. Las identidades administradas en Azure eliminan la necesidad de que los desarrolladores controle estas credenciales manualmente. MSAL.NET admite la adquisición de tokens a través del servicio de identidad administrada cuando se usa con aplicaciones que se ejecutan dentro de Azure infraestructura, como:

Para obtener una lista completa, consulte Azure servicios que pueden usar identidades administradas para acceder a otros servicios.

¿Qué SDK se va a usar: SDK de Azure o MSAL?

Las bibliotecas de MSAL proporcionan API de nivel inferior que están más cerca de los protocolos OAuth2 y OIDC.

Tanto MSAL.NET como SDK de Azure permiten adquirir tokens a través de la identidad administrada. Internamente, SDK de Azure usa MSAL.NET y proporciona una API de nivel superior a través de sus DefaultAzureCredential abstracciones y ManagedIdentityCredential .

Si la aplicación ya usa uno de los SDK, siga usando el mismo SDK. Use SDK de Azure, si va a escribir una nueva aplicación y tiene previsto llamar a otros recursos de Azure, ya que este SDK proporciona una mejor experiencia para desarrolladores al permitir que la aplicación se ejecute en máquinas privadas para desarrolladores en las que la identidad administrada no existe. Considere la posibilidad de usar MSAL si necesita llamar a otras API web de bajada, como Microsoft Graph o su propia API web.

Note

Microsoft. Identity.Web es una API de nivel superior que ofrece integración con ASP.NET Core y ASP.NET clásico, mientras que usa MSAL en segundo plano. La biblioteca también proporciona una manera de cargar credenciales (certificados, aserciones firmadas) usadas por MSAL.NET como credenciales de cliente. Para los certificados, usa DefaultAzureCredentials para capturar certificados de KeyVault. También ofrece federación de identidades de carga de trabajo con credenciales de identidad administrada. Para obtener más información, consulte CredentialDescription.

Inicio rápido

Para empezar rápidamente y ver la Identidad administrada de Azure en acción, puede utilizar uno de los ejemplos que el equipo creó con este fin:

Uso de identidades administradas

Hay dos tipos de identidades administradas disponibles para los desarrolladores: asignadas por el sistema y asignadas por el usuario. Puede obtener más información sobre las diferencias en el artículo Tipos de identidad administrada . MSAL.NET admite la adquisición de tokens con ambos. El registro de MSAL.NET permite hacer un seguimiento de las solicitudes y los metadatos relacionados.

Antes de usar identidades administradas de MSAL.NET, los desarrolladores deben habilitarlas para los recursos que quieren usar a través de CLI de Azure o el Azure Portal.

Examples

Para identidades asignadas por el usuario y asignadas por el sistema, los desarrolladores pueden usar la ManagedIdentityApplicationBuilder clase .

Identidades administradas asignadas por el sistema

En el caso de las identidades administradas asignadas por el sistema, el desarrollador no necesita pasar información adicional al crear una instancia de IManagedIdentityApplication, ya que deducirá automáticamente los metadatos pertinentes sobre la identidad asignada.

AcquireTokenForManagedIdentity(String) se invoca con el recurso para el que se quiere adquirir un token, como https://management.azure.com.

IManagedIdentityApplication mi = ManagedIdentityApplicationBuilder.Create(ManagedIdentityId.SystemAssigned)
    .Build();

AuthenticationResult result = await mi.AcquireTokenForManagedIdentity(resource)
    .ExecuteAsync()
    .ConfigureAwait(false);

Identidades administradas asignadas por el usuario

En el caso de las identidades administradas asignadas por el usuario, el desarrollador debe pasar el identificador de cliente, el identificador de recurso completo o el identificador de objeto de la identidad administrada al crear IManagedIdentityApplication.

Al igual que en el caso de las identidades administradas asignadas por el sistema, se llama a AcquireTokenForManagedIdentity(String) con el recurso para el que se quiere adquirir un token, como https://management.azure.com.

IManagedIdentityApplication mi = ManagedIdentityApplicationBuilder.Create(ManagedIdentityId.WithUserAssignedClientId(clientIdOfUserAssignedManagedIdentity))
    .Build();

AuthenticationResult result = await mi.AcquireTokenForManagedIdentity(resource)
    .ExecuteAsync()
    .ConfigureAwait(false);

Caching

De forma predeterminada, MSAL.NET admite el almacenamiento en caché en memoria. MSAL no admite la extensibilidad de la memoria caché para la identidad administrada debido a problemas de seguridad al usar la caché distribuida. Dado que un token adquirido para la identidad administrada pertenece a un recurso de Azure, el uso de una caché distribuida podría exponerlo al otro Azure recursos que comparten la memoria caché.

Solución de problemas

En el caso de las solicitudes con errores, la respuesta de error contiene un identificador de correlación que se puede usar para realizar más diagnósticos y análisis de registros. Tenga en cuenta que los identificadores de correlación generados en MSAL.NET o pasados a MSAL son diferentes de los devueltos en las respuestas de error del servidor, ya que MSAL.NET no pueden pasar el identificador de correlación a los puntos de conexión de adquisición de tokens de identidad administrada.

Posibles errores

MsalServiceException Código de error: managed_identity_failed_response Mensaje de error: error inesperado al capturar el token de AAD

Esta excepción puede significar que el recurso para el que está intentando adquirir un token no se admite o se proporciona con el formato de identificador de recurso incorrecto. Algunos ejemplos de formatos de identificador de recurso correctos son https://management.azure.com/.default, https://management.azure.comy https://graph.microsoft.com.

MsalServiceException Código de error: managed_identity_unreachable_network.

Esta excepción puede significar que es probable que use un recurso en el que MSAL.NET no admita la adquisición de tokens para la identidad administrada o ejecute el código de ejemplo desde una máquina de desarrollo donde el punto de conexión para adquirir el token para identidades administradas no es accesible.