Autenticación con SDK de Azure para .NET

Los paquetes más recientes de SDK de Azure para .NET usan un paquete de autenticación común para autenticarse, Azure.Identity. Se recomienda usar Azure.Identity sobre otros mecanismos de autenticación que se describen más adelante en este documento. Los paquetes que admiten las credenciales proporcionadas por Azure.Identity se basan en Azure.Core y tienen identificadores de paquete que comienzan por Azure. Vea la lista de paquetes para obtener un inventario de los paquetes que usan Azure.Core.

Para obtener instrucciones completas sobre cómo usar Azure.Identity en el proyecto, consulte la documentación de Azure Identity Client para .NET.

Sugerencia

Consulte la muestra de Azure Identity, Resource Management y Storage para obtener ejemplos del uso de Azure Identity para administrar y acceder a los recursos de Azure.

Para autenticar con bibliotecas que no son compatibles con Azure.Identity, consulte el resto de este tema.

Acceso a recursos de Azure

Para interactuar con los recursos de Azure, como recuperar un secreto de Key Vault o almacenar un blob en Storage, muchas bibliotecas de servicios de Azure requieren una cadena de conexión o claves para la autenticación. Por ejemplo, SQL Database usa una cadena de conexión SQL estándar. Las cadenas de conexión de servicio se usan en otros servicios de Azure como CosmosDB, Azure Cache for Redis y Service Bus. Puede obtener esas cadenas mediante Azure Portal, la CLI o PowerShell. También puede usar las bibliotecas de administración de Azure para .NET para consultar recursos para generar cadenas de conexión en el código.

Los métodos para usar una cadena de conexión varían según el producto. Consulte la documentación de su producto Azure.

Administración de recursos de Azure

La aplicación .NET necesita permisos para leer y crear recursos en la suscripción de Azure para poder usar las bibliotecas de administración de Azure para .NET. Cree a una entidad de servicio y configure la aplicación para que se ejecute con sus credenciales para conceder este acceso. Las entidades de servicio proporcionan una manera de crear una cuenta no interactiva asociada con su identidad a la que conceder únicamente los privilegios que la aplicación necesita para la ejecución.

En primer lugar, inicie sesión en Azure Cloud Shell. Compruebe que está usando la suscripción en la que desea crear la entidad de servicio.

az account show

Se muestra la información de la suscripción.

{
  "environmentName": "AzureCloud",
  "id": "15dbcfa8-4b93-4c9a-881c-6189d39f04d4",
  "isDefault": true,
  "name": "my-subscription",
  "state": "Enabled",
  "tenantId": "43413cc1-5886-4711-9804-8cfea3d1c3ee",
  "user": {
    "cloudShellID": true,
    "name": "jane@contoso.com",
    "type": "user"
  }
}

Si no ha iniciado sesión en la suscripción correcta, escriba az account set -s <name or ID of subscription> para seleccionar la correcta.

Cree la entidad de servicio con el siguiente comando:

az ad sp create-for-rbac --sdk-auth

La información de la entidad de servicio se muestra con formato JSON.

{
  "clientId": "b52dd125-9272-4b21-9862-0be667bdf6dc",
  "clientSecret": "ebc6e170-72b2-4b6f-9de2-99410964d2d0",
  "subscriptionId": "ffa52f27-be12-4cad-b1ea-c2c241b6cceb",
  "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47",
  "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
  "resourceManagerEndpointUrl": "https://management.azure.com/",
  "activeDirectoryGraphResourceId": "https://graph.windows.net/",
  "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
  "galleryEndpointUrl": "https://gallery.azure.com/",
  "managementEndpointUrl": "https://management.core.windows.net/"
}

Copie y pegue la salida JSON en un editor de texto para usarla más adelante.

Ahora que ya está creada la entidad de servicio, hay dos opciones disponibles para autenticarse en la entidad de servicio para crear y administrar los recursos.

Para las dos opciones, tendrá que agregar los siguientes paquetes NuGet al proyecto.

Install-Package Microsoft.Azure.Management.Fluent
Install-Package Microsoft.Azure.Management.ResourceManager.Fluent

Autenticación con credenciales de token

El primer método consiste en generar el objeto de credencial de token en el código. Debe almacenar las credenciales de forma segura en un archivo de configuración, el Registro o Azure KeyVault.

var credentials = SdkContext.AzureCredentialsFactory
    .FromServicePrincipal(clientId,
        clientSecret,
        tenantId,
        AzureEnvironment.AzureGlobalCloud);

Use los valores de clientId, clientSecret y tenantId de la salida JSON de la creación de la entidad de servicio.

Después, cree el objeto Azure de punto de entrada para empezar a trabajar con la API:

var azure = Microsoft.Azure.Management.Fluent.Azure
    .Configure()
    .Authenticate(credentials)
    .WithDefaultSubscription();

Se recomienda proporcionar explícitamente subscriptionId de la salida JSON al objeto Azure:

var azure = Microsoft.Azure.Management.Fluent.Azure
    .Configure()
    .Authenticate(credentials)
    .WithSubscription(subscriptionId);

Autenticación basada en archivo

La autenticación basada en archivo permite colocar las credenciales de la entidad de servicio en un archivo de texto sin formato y protegerlo en el sistema de archivos.

Cree un archivo de texto llamado azureauth.json. Pegue la salida JSON de la creación de la entidad de servicio.

Guarde este archivo en una ubicación segura en el sistema donde el código pueda leerlo. Use PowerShell para establecer una variable de entorno denominada AZURE_AUTH_LOCATION con la ruta de acceso completa al archivo, por ejemplo:

[Environment]::SetEnvironmentVariable("AZURE_AUTH_LOCATION", "C:\src\azureauth.json", "User")

Lea el contenido del archivo y cree el objeto Azure de punto de entrada para empezar a trabajar con la API:

// pull in the location of the authentication properties file from the environment
var credentials = SdkContext.AzureCredentialsFactory
    .FromFile(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION"));

var azure = Microsoft.Azure.Management.Fluent.Azure
    .Configure()
    .Authenticate(credentials)
    .WithDefaultSubscription();