Autenticar aplicaciones hospedadas en recursos de Azure con el SDK de Azure para .NET
Cuando una aplicación se hospeda en Azure mediante un servicio como Azure App Service, Azure Virtual Machines o Azure Container Instances, el enfoque recomendado para autenticar una aplicación en recursos de Azure es usar una identidad administrada.
Una identidad administrada proporciona una identidad para la aplicación para que pueda conectarse a otros recursos de Azure sin necesidad de usar una clave secreta u otro secreto de aplicación. Internamente, Azure conoce la identidad de la aplicación y a qué recursos se le permite conectarse. Azure usa esta información para obtener automáticamente tokens de Microsoft Entra para que la aplicación permita la conexión a otros recursos de Azure, todo ello sin tener que administrar ningún secreto de aplicación.
Tipos de identidad administrada
Hay dos tipos de identidades administradas:
- Asignada por el sistema: este tipo de identidad administrada se proporciona mediante un recurso de Azure y está vinculado directamente a dicho recurso. Al habilitar la identidad administrada en un recurso de Azure, obtendrá una identidad administrada asignada por el sistema para ese recurso. Una identidad administrada asignada por el sistema está vinculada al ciclo de vida del recurso de Azure al que está asociada. Por tanto, cuando se elimina el recurso, Azure elimina automáticamente la identidad. Puesto que lo único que tiene que hacer es habilitar la identidad administrada para el recurso de Azure que hospeda el código, este es el tipo más sencillo de identidad administrada que se va a usar.
- Asignada por el usuario: también es posible crear una identidad administrada como un recurso de Azure independiente. Esto se usa con más frecuencia cuando la solución tiene varias cargas de trabajo que se ejecutan en varios recursos de Azure que necesitan compartir la misma identidad y los mismos permisos. Por ejemplo, si la solución tuviese componentes que se ejecutaran en varias instancias de máquina virtual y de App Service que necesitaran acceso al mismo conjunto de recursos de Azure, tendría sentido crear y usar una identidad administrada asignada por el usuario en dichos recursos.
En este artículo se describen los pasos necesarios para habilitar y usar una identidad administrada asignada por el sistema para una aplicación. Si necesita usar una identidad administrada asignada por el usuario, consulte el artículo Administración de identidades administradas asignadas por el usuario para obtener información sobre cómo crear una identidad administrada asignada por el usuario.
1: Activación de la identidad administrada en el recurso de Azure que hospeda la aplicación
El primer paso es habilitar la identidad administrada en el recurso de Azure que hospeda la aplicación. Por ejemplo, si hospeda una aplicación .NET mediante Azure App Service, debe habilitar la identidad administrada para la aplicación web de App Service que hospeda la aplicación. Si usara una máquina virtual para hospedar la aplicación, tendría que habilitar la máquina virtual para usar la identidad administrada.
Puede habilitar la identidad administrada para que se use para un recurso de Azure mediante Azure Portal o la CLI de Azure.
2: Asignación de roles a la identidad administrada
A continuación, debe determinar qué roles (permisos) necesita la aplicación y asignar la identidad administrada a dichos roles en Azure. Se pueden asignar roles a una identidad administrada en un ámbito de recurso, grupo de recursos o suscripción. En este ejemplo se muestra cómo asignar roles en el ámbito del grupo de recursos, ya que la mayoría de las aplicaciones agrupan todos sus recursos de Azure en un único grupo de recursos.
3: Implementación de DefaultAzureCredential en la aplicación
DefaultAzureCredential es una secuencia ordenada de mecanismos para autenticarse en Microsoft Entra. Cada mecanismo de autenticación es una clase derivada de la clase TokenCredential y se conoce como una credencial. En tiempo de ejecución, DefaultAzureCredential
intenta autenticarse con la primera credencial. Si esa credencial no puede adquirir un token de acceso, se intenta utilizar la siguiente credencial de la secuencia, y así sucesivamente hasta que se obtenga correctamente un token de acceso. De esta manera, la aplicación puede usar diferentes credenciales en distintos entornos sin implementar código específico del entorno.
El orden y las ubicaciones en las que DefaultAzureCredential
busca las credenciales se encuentran en DefaultAzureCredential.
Para usar DefaultAzureCredential
, agregue el paquete Azure.Identity y, opcionalmente, los paquetes de Microsoft.Extensions.Azure a la aplicación:
En un terminal de su elección, vaya al directorio del proyecto de la aplicación y ejecute los siguientes comandos:
dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure
Se accede a los servicios de Azure mediante clases de cliente especializadas de las distintas bibliotecas cliente del SDK de Azure. Estas clases y sus propios servicios personalizados deben registrarse para que se pueda acceder a ellas a través de la inserción de dependencias en toda la aplicación. En Program.cs
, complete los pasos siguientes para registrar una clase de cliente y DefaultAzureCredential
:
- Incluya los espacios de nombres
Azure.Identity
yMicrosoft.Extensions.Azure
mediante las directivasusing
. - Registre el cliente de servicio de Azure mediante el método de extensión con el prefijo
Add
correspondiente. - Pase una instancia del objeto
DefaultAzureCredential
al métodoUseCredential
.
Por ejemplo:
using Microsoft.Extensions.Azure;
using Azure.Identity;
builder.Services.AddAzureClients(clientBuilder =>
{
clientBuilder.AddBlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"));
clientBuilder.UseCredential(new DefaultAzureCredential());
});
Una alternativa a UseCredential
consiste en crear instancias de DefaultAzureCredential
directamente:
using Azure.Identity;
builder.Services.AddSingleton<BlobServiceClient>(_ =>
new BlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"),
new DefaultAzureCredential()));
Cuando el código anterior se ejecuta en la estación de trabajo de desarrollo local, busca en las variables de entorno una entidad de servicio de aplicación o en las herramientas de desarrollo instaladas localmente, como Visual Studio, un conjunto de credenciales de desarrollador. Se puede usar cualquier enfoque para autenticar la aplicación en los recursos de Azure durante el desarrollo local.
Cuando se implementa en Azure, este mismo código también puede autenticar su aplicación en otros recursos de Azure. DefaultAzureCredential
puede recuperar la configuración del entorno y las configuraciones de identidad administrada para autenticarse en otros servicios automáticamente.