Compartir a través de


Autenticación en recursos de Azure desde aplicaciones .NET hospedadas en el entorno local

Las aplicaciones hospedadas fuera de Azure, como las locales o en un centro de datos de terceros, deben usar un principal de servicio de la aplicación a través de Microsoft Entra ID para autenticarse con los servicios de Azure. En las secciones siguientes, obtendrá información sobre lo siguiente:

  • Cómo registrar una aplicación en Microsoft Entra para crear un principal de servicio
  • Cómo asignar roles a permisos de ámbito
  • Autenticar usando un principal de servicio desde el código de tu aplicación

El uso de entidades de servicio de aplicaciones dedicadas permite cumplir el principio de privilegios mínimos al acceder a los recursos de Azure. Los permisos se limitan a los requisitos específicos de la aplicación durante el desarrollo, lo que impide el acceso accidental a los recursos de Azure destinados a otras aplicaciones o servicios. Este enfoque también ayuda a evitar problemas cuando la aplicación se mueve a producción asegurándose de que no tiene privilegios excesivos en el entorno de desarrollo.

Debe crear un registro de aplicación diferente para cada entorno en el que se hospeda la aplicación. Esto permite configurar permisos de recursos específicos del entorno para cada entidad de servicio y asegurarse de que una aplicación implementada en un entorno no se comunica con los recursos de Azure que forman parte de otro entorno.

Registro de la aplicación en Azure

Los objetos principal de servicio de aplicación se crean a través de un registro de aplicación en Azure mediante el portal de Azure o la Azure CLI.

  • Portal de Azure
  • CLI de Azure
  1. En el portal de Azure, use la barra de búsqueda para ir a la página App registrations.

  2. En la página Registros de aplicaciones, seleccione + Nuevo registro.

  3. En la página Registrar una aplicación :

    • En el campo Nombre , escriba un valor descriptivo que incluya el nombre de la aplicación y el entorno de destino.
    • Para los tipos de cuenta admitidos, seleccione Solo cuentas en este directorio organizativo (Solo cliente de Microsoft dirigido - locatario único) o la opción que mejor se adapte a sus requisitos.
  4. Seleccione Registrar para registrar la aplicación y crear la entidad de servicio.

    Captura de pantalla que muestra cómo crear un registro de aplicación en Azure Portal.

  5. En la página Registro de aplicaciones de la aplicación, copie el identificador de aplicación (cliente) y el identificador de directorio (inquilino) y péguelos en una ubicación temporal para usarlos posteriormente en las configuraciones de código de la aplicación.

  6. Seleccione Agregar un certificado o un secreto para configurar las credenciales de la aplicación.

  7. En la página Certificados y secretos, seleccione + Nuevo secreto de cliente.

  8. En el panel flotante Agregar un secreto de cliente que aparece:

    • En Descripción, escriba un valor de Current.
    • Para el valor Expira, deje el valor recomendado predeterminado de 180 días.
    • Seleccione Agregar para agregar el secreto.
  9. En la página Certificados y secretos , copie la propiedad Value del secreto de cliente para su uso en un paso futuro.

    Nota:

    El valor del secreto de cliente solo se muestra una vez después de crear el registro de la aplicación. Puede agregar más secretos de cliente sin invalidar este secreto de cliente, pero no hay ninguna manera de volver a mostrar este valor.

Asignar roles al principal de servicio de la aplicación

A continuación, determine qué roles (permisos) necesita la aplicación en qué recursos y asigne esos roles a la entidad de servicio que creó. Los roles se pueden asignar en el á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.

  • Azure Portal
  • CLI de Azure
  1. En Azure Portal, vaya a la página Información general del grupo de recursos que contiene la aplicación.

  2. Seleccione Control de acceso (IAM) en el panel de navegación izquierdo.

  3. En la página Control de acceso (IAM), seleccione + Agregar y, a continuación, elija Agregar asignación de roles en el menú desplegable. La página Agregar asignación de roles proporciona varias pestañas para configurar y asignar roles.

  4. En la pestaña Rol , use el cuadro de búsqueda para buscar el rol que desea asignar. Seleccione el rol y, a continuación, elija Siguiente.

  5. En la pestaña Miembros :

    • En Asignar acceso al valor, seleccione Usuario, grupo o entidad de servicio .
    • Para el valor Miembros , elija + Seleccionar miembros para abrir el panel flotante Seleccionar miembros .
    • Busque el principal de servicio que creó anteriormente y selecciónelo en los resultados filtrados. Elija Seleccionar para seleccionar el grupo y cerrar el panel flotante.
    • Seleccione Revisar y asignar en la parte inferior de la pestaña Miembros .

    Captura de pantalla que muestra cómo asignar un rol a la entidad de servicio.

  6. En la pestaña Revisar y asignar , seleccione Revisar y asignar en la parte inferior de la página.

Establecimiento de las variables de entorno de la aplicación

En tiempo de ejecución, ciertas credenciales de la biblioteca de identidades de Azure, como DefaultAzureCredential, EnvironmentCredentialy ClientSecretCredential, buscan información de entidad de servicio por convención en las variables de entorno. Hay varias maneras de configurar variables de entorno al trabajar con .NET, en función de las herramientas y el entorno.

Independientemente del método que elija, configure las siguientes variables de entorno para el principal del servicio:

  • AZURE_CLIENT_ID: se usa para identificar la aplicación registrada en Azure.
  • AZURE_TENANT_ID: el identificador del inquilino de Microsoft Entra.
  • AZURE_CLIENT_SECRET: credencial secreta que se generó para la aplicación.

En Visual Studio, las variables de entorno se pueden establecer en el launchsettings.json archivo de la Properties carpeta del proyecto. Estos valores se extraen automáticamente cuando se inicia la aplicación. Sin embargo, estas configuraciones no viajan con la aplicación durante la implementación, por lo que debe configurar variables de entorno en el entorno de hospedaje de destino.

"profiles": {
    "SampleProject": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "https://localhost:7177;http://localhost:5177",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "AZURE_CLIENT_ID": "<your-client-id>",
        "AZURE_TENANT_ID":"<your-tenant-id>",
        "AZURE_CLIENT_SECRET": "<your-client-secret>"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "AZURE_CLIENT_ID": "<your-client-id>",
        "AZURE_TENANT_ID":"<your-tenant-id>",
        "AZURE_CLIENT_SECRET": "<your-client-secret>"
      }
    }
  }

Autentica a servicios de Azure desde tu aplicación

La biblioteca de identidades de Azure proporciona varias credenciales: implementaciones de TokenCredential adaptadas para admitir diferentes escenarios y flujos de autenticación de Microsoft Entra. Los pasos que se indican a continuación muestran cómo usar ClientSecretCredential al trabajar con entidades de servicio localmente y en producción.

Implementación del código

Agregue el paquete Azure.Identity . En un proyecto de ASP.NET Core, instale también el paquete Microsoft.Extensions.Azure :

  • Línea de comandos
  • Administrador de paquetes de NuGet

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 la inserción de dependencias para que se puedan usar en toda la aplicación. En Program.cs, complete los pasos siguientes para configurar una clase de cliente para la inserción de dependencias y la autenticación basada en tokens:

  1. Incluya los espacios de nombres Azure.Identity y Microsoft.Extensions.Azure mediante las directivas using.
  2. Registre el cliente de servicio de Azure mediante el método de extensión con el prefijo correspondiente Add.
  3. Configure ClientSecretCredential con tenantId, clientId y clientSecret.
  4. Pase la ClientSecretCredential instancia al UseCredential método .
builder.Services.AddAzureClients(clientBuilder =>
{
    var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
    var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
    var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");

    clientBuilder.AddBlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"));

    clientBuilder.UseCredential(new ClientSecretCredential(tenantId, clientId, clientSecret));
});

Una alternativa al UseCredential método es proporcionar la credencial al cliente de servicio directamente:

var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");

builder.Services.AddSingleton<BlobServiceClient>(_ =>
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new ClientSecretCredential(tenantId, clientId, clientSecret)));