Irakurri ingelesez

Partekatu honen bidez:


Autenticar aplicaciones .NET en servicios de Azure utilizando la visión general de la biblioteca de identidades de Azure

Cuando una aplicación necesita acceder a un recurso de Azure, debe autenticarse en Azure. Esto se aplica a todas las aplicaciones, ya estén implementadas en Azure, implementadas en las instalaciones o en desarrollo en una estación de trabajo de desarrollador local. En este artículo se describen los métodos recomendados para autenticar una aplicación en Azure cuando se utilizan las bibliotecas cliente del SDK de Azure.

Se recomienda que las aplicaciones utilicen autenticación basada en tokens en lugar de cadenas de conexión al autenticarse en los recursos de Azure. La biblioteca Azure Identity proporciona clases que admiten la autenticación basada en tokens y permiten que las aplicaciones se autentiquen sin problemas en los recursos de Azure, tanto si la aplicación se encuentra en desarrollo local como si se ha implementado en Azure o en un servidor local.

El tipo específico de autenticación basada en token que una app debe utilizar para autenticarse en los recursos de Azure depende de dónde se ejecute la app y se muestra en el siguiente diagrama:

Un diagrama mostrando las estrategias de autenticación basadas en tokens para una aplicación dependiendo de dónde se está ejecutando.

Cuando una aplicación:

  • Se ejecuta localmente durante la implementación, la aplicación se puede autenticar en Azure mediante una entidad de servicio de aplicación para el desarrollo local o utilizando las credenciales de Azure del desarrollador. Cada opción se describe con más detalle en autenticación en el contexto del desarrollo local.
  • Hospedado en Azure, la app debe autenticarse en los recursos de Azure utilizando una identidad administrada. Esta opción se describe con más detalle en autenticación en entornos de servidor.
  • Se hospeda e implementa localmente, la aplicación debería autenticarse en los recursos de Azure mediante una entidad de servicio de aplicación. Esta opción se describe con más detalle en autenticación en entornos de servidor.

DefaultAzureCredential

La clase DefaultAzureCredential proporcionada por la biblioteca Azure Identity permite a las apps utilizar diferentes métodos de autenticación dependiendo del entorno en el que se ejecuten. Esto permite que las aplicaciones se promuevan desde el desarrollo local hasta entornos de prueba a producción sin cambios en el código. Usted configura el método de autenticación apropiado para cada entorno, y DefaultAzureCredential detectará y utilizará automáticamente ese método de autenticación. El uso de DefaultAzureCredential debe ser preferido sobre la codificación manual de la lógica condicional o las marcas de características para usar diferentes métodos de autenticación en diferentes entornos.

Los detalles sobre el uso de DefaultAzureCredential están cubiertos en Uso de DefaultAzureCredential en una aplicación.

Ventajas de la autenticación basadas en token

La autenticación basada en tokens ofrece las siguientes ventajas sobre la autenticación con cadenas de conexión:

  • Los métodos de autenticación basados en tokens descritos a continuación le permiten establecer los permisos específicos necesarios para la aplicación en el recurso de Azure. Este enfoque sigue el principio de privilegios mínimos. Por el contrario, una cadena de conexión concede derechos completos al recurso de Azure.
  • Mientras que cualquiera o cualquier aplicación con una cadena de conexión puede conectarse a un recurso de Azure, los métodos de autenticación basados en tokens limitan el acceso al recurso solo a las aplicaciones diseñadas para acceder al recurso.
  • En el caso de una identidad administrada, no hay ningún secreto de aplicación que almacenar. Esto hace que la aplicación sea más segura porque no hay ninguna cadena de conexión o secreto de aplicación que pueda verse comprometido.
  • El paquete Azure.Identity adquiere y administra tokens Microsoft Entra por usted. Esto hace que el uso de la autenticación basada en tokens sea tan fácil de usar como una cadena de conexión.

El uso de cadenas de conexión debe limitarse a aplicaciones iniciales de prueba de concepto o prototipos de desarrollo que no accedan a datos sensibles o de producción. De lo contrario, las clases de autenticación basadas en tokens disponibles en la biblioteca Azure Identity deberían preferirse siempre que se autentique en recursos Azure.

Autenticación en entornos de servidor

Cuando se hospeda en un entorno de servidor, a cada aplicación se le debe asignar una identidad de aplicación única por entorno en el que se ejecuta la aplicación. En Azure, una identidad de aplicación está representada por un entidad de servicio, un tipo entidad de seguridad destinado a identificar y autenticar apps en Azure. El tipo de entidad de servicio que se va a usar para la aplicación depende de dónde se esté ejecutando la aplicación.

Método de autenticación Descripción
Aplicaciones hospedadas en Azure Las aplicaciones hospedadas en Azure deben usar una entidad de servicio de identidad administrada. Las identidades administradas están diseñadas para representar la identidad de una aplicación hospedada en Azure y solo se pueden usar con aplicaciones hospedadas en Azure.

Por ejemplo, una aplicación web de .NET hospedada en Azure App Service se asignaría a una identidad administrada. La identidad administrada asignada a la aplicación se usaría para autenticar la aplicación en otros servicios de Azure.

Aplicaciones hospedadas fuera de Azure
(por ejemplo, aplicaciones locales)
Las aplicaciones hospedadas fuera de Azure (por ejemplo, aplicaciones locales) que necesitan conectarse a los servicios de Azure deben usar un principal de servicio de aplicación . Un principal de servicio de aplicación representa la identidad de la aplicación en Azure y se crea mediante el proceso de registro de aplicaciones.

Por ejemplo, considera una aplicación web de .NET hospedada en el entorno local que use Azure Blob Storage. Crearía una entidad de servicio de aplicación para la aplicación mediante el proceso de registro de aplicaciones. Los AZURE_CLIENT_ID, AZURE_TENANT_IDy AZURE_CLIENT_SECRET se almacenarán como variables de entorno que leerá la aplicación en tiempo de ejecución y permitirán que la aplicación se autentique en Azure mediante la entidad de servicio de la aplicación.

Autenticación durante el desarrollo local

Cuando una app se ejecuta en la estación de trabajo de un desarrollador durante el desarrollo local, aún debe autenticarse en cualquier servicio de Azure utilizado por la app. Las dos estrategias principales para autenticar aplicaciones en Azure durante el desarrollo local son:

Método de autenticación Descripción
Crear objetos de entidad de servicio de aplicación dedicados que se usarán durante el desarrollo local En este método, los objetos de entidad de servicio de la aplicación dedicada se configuran mediante el proceso de registro de aplicaciones para su uso durante el desarrollo local. A continuación, la identidad de la entidad de servicio se almacena como variables de entorno a las que va a acceder la aplicación cuando se ejecuta en el desarrollo local.

Este método permite asignar los permisos de recursos específicos necesarios para la aplicación a los objetos de entidad de servicio utilizados por los desarrolladores durante el desarrollo local. Esto garantiza que la aplicación solo tiene acceso a los recursos específicos que necesita y replica los permisos que tendrá la aplicación en producción.

La desventaja de este enfoque es la necesidad de crear objetos de principal de servicio independientes para cada desarrollador que trabaje en una aplicación.

Autenticación de la aplicación en Azure mediante las credenciales del desarrollador durante el desarrollo local En este método, un desarrollador debe iniciar sesión en Azure desde Visual Studio, la extensión de Azure Tools para VS Code, la CLI de Azure o Azure PowerShell en su estación de trabajo local. A continuación, la aplicación puede acceder a las credenciales del desarrollador desde el almacén de credenciales y usar esas credenciales para acceder a los recursos de Azure desde la aplicación.

Este método tiene la ventaja de una configuración más sencilla, ya que un desarrollador solo necesita iniciar sesión en su cuenta de Azure desde Visual Studio, VS Code o la CLI de Azure. El inconveniente de este enfoque es que es probable que la cuenta del desarrollador tenga más permisos de los que necesita la aplicación. Por lo tanto, este enfoque no replica con precisión los permisos con los que se ejecutará la aplicación en producción.

Uso de DefaultAzureCredential en una aplicación

DefaultAzureCredential es una secuencia ordenada de mecanismos para autenticarse en Microsoft Entra ID. Cada mecanismo de autenticación es una clase derivada de la clase TokenCredential y se conoce como credencial de . 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.

Para usar DefaultAzureCredential, agregue de Azure.Identity y, opcionalmente, los paquetes de Microsoft.Extensions.Azure a su aplicación.

En un terminal de su elección, navegue hasta el directorio del proyecto de la aplicación y ejecute los siguientes comandos:

CLI de .NET
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 tus propios servicios personalizados deben registrarse para que se pueda acceder a ellos mediante inyección de dependencias en toda tu app. En Program.cs, complete los siguientes pasos para registrar una clase cliente y DefaultAzureCredential:

  1. Incluya los espacios de nombres Azure.Identity y Microsoft.Extensions.Azure mediante directivas using.
  2. Registre el cliente de servicio de Azure con el método de extensión correspondiente con el prefijo Add.
  3. Pasar una instancia de DefaultAzureCredential al método UseCredential.

Por ejemplo:

c#
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 es instanciar DefaultAzureCredential directamente:

c#
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 su estación de trabajo de desarrollo local, busca en las variables de entorno un principal de servicio de aplicación o en las herramientas de desarrollador 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 despliega en Azure, este mismo código también puede autenticar tu 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.