Share via


Autenticación con el SDK de Azure para Go (heredado)

Importante

Este artículo se aplica a la versión heredada del SDK de Azure para Go. Para autenticarse en los módulos más recientes, use el paquete de identidad de Azure.

Azure SDK para Go ofrece varias maneras de autenticarse con Azure. Estos tipos de autenticación se invocan con diferentes métodos de autenticación. En este artículo se describen los tipos y métodos disponibles, y cómo elegir los más adecuados para su aplicación.

Métodos y tipos de autenticación disponibles

El SDK de Azure para Go ofrece varios tipos diferentes de autenticación, mediante el uso de diferentes conjuntos de credenciales. Cada tipo de autenticación está disponible mediante diferentes métodos de autenticación, que explican cómo el SDK toma estas credenciales como datos de entrada. En la siguiente tabla se describen los tipos de autenticación disponibles y las situaciones en las que la aplicación recomienda utilizarlos.

Tipo de autenticación Recomendado si...
Autenticación basada en certificados Tiene un certificado X509 configurado para un usuario o una entidad de servicio de Microsoft Entra. Para obtener más información, consulte Introducción a la autenticación basada en certificados en Microsoft Entra ID.
Credenciales de cliente Tiene una entidad de servicio configurada que está preparada para esta aplicación o una clase de aplicaciones a las que pertenece. Para más información, consulte Creación de una entidad de servicio con la CLI de Azure.
Identidades administradas de recursos de Azure La aplicación se ejecuta en un recurso de Azure que se ha configurado con una identidad administrada. Para más información, consulte Identidades administradas para recursos de Azure.
Token del dispositivo La aplicación está diseñada para usarse solo interactivamente. Los usuarios pueden tener habilitada la autenticación multifactor. Los usuarios tienen acceso a un explorador web para iniciar sesión. Para más información, consulte Use device token authentication (Uso de la autenticación por tokens del dispositivo).
Nombre de usuario y contraseña Tiene una aplicación interactiva que no puede utilizar ningún otro método de autenticación. Los usuarios no tienen habilitada la autenticación multifactor para su inicio de sesión de Microsoft Entra.

Puntos clave

  • Si usa un tipo de autenticación distinto de las credenciales de cliente, la aplicación debe registrarse en el identificador de Microsoft Entra. Para obtener información sobre cómo hacerlo, consulte Integración de aplicaciones con el identificador de Microsoft Entra.
  • A menos que tenga requisitos especiales, evite la autenticación por nombre de usuario o contraseña. En situaciones en las que el inicio de sesión basado en el usuario es adecuado, la autenticación de tokens de dispositivo normalmente se puede usar en su lugar.

Estos tipos de autenticación están disponibles a través de diferentes métodos.

Todas las funciones y tipos de autenticación están disponibles en el paquete de github.com/Azure/go-autorest/autorest/azure/auth .

Nota:

A menos que tenga requisitos especiales, evite la autenticación basada en cliente. Este método de autenticación fomenta las malas prácticas. En particular, el uso de la autenticación basada en cliente hace que sea tentador codificar de forma rígida las credenciales. La escritura de código personalizado para la autenticación también puede interrumpirse en futuras versiones del SDK si cambian los requisitos de autenticación.

Uso de la autenticación basada en entornos

Si ejecuta la aplicación en un entorno controlado, la autenticación basada en entornos es la opción natural. Con este método de autenticación, el shell de entorno se configura antes de ejecutar la aplicación. En tiempo de ejecución, el SDK para Go lee estas variables de entorno para autenticarse con Azure.

La autenticación basada en entornos admite todos los tipos de autenticación, excepto los tokens de dispositivo, que se evalúan en el orden siguiente:

  • Credenciales de cliente
  • Autenticación basada en certificados
  • Nombre de usuario y contraseña
  • Identidades administradas de recursos de Azure

Si un tipo de autenticación tiene valores no establecidos o se rechaza, el SDK intenta automáticamente con el siguiente tipo de autenticación. Cuando no hay más tipos disponibles para probar, el SDK de devuelve un error.

En la tabla siguiente se detallan las variables de entorno que deben configurarse para cada tipo de autenticación admitida por la autenticación basada en entornos.

Tipo de autenticación Variable de entorno Descripción
Credenciales de cliente AZURE_TENANT_ID El identificador del inquilino de Active Directory al que pertenece la entidad de servicio.
AZURE_CLIENT_ID El nombre o identificador de la entidad de servicio.
AZURE_CLIENT_SECRET Secreto asociado a la entidad de servicio.
Certificate AZURE_TENANT_ID El identificador del inquilino de Active Directory con el que está registrado el certificado.
AZURE_CLIENT_ID El identificador del cliente de aplicación asociado al certificado.
AZURE_CERTIFICATE_PATH La ruta de acceso a un archivo de certificado de cliente.
AZURE_CERTIFICATE_PASSWORD La contraseña para el certificado de cliente.
Nombre de usuario/contraseña AZURE_TENANT_ID El identificador del inquilino de Active Directory al que pertenece el usuario.
AZURE_CLIENT_ID El identificador del cliente de aplicación.
AZURE_USERNAME El nombre de usuario con el que se va a iniciar sesión.
AZURE_PASSWORD La contraseña con la que se va a iniciar sesión.
Identidad administrada No se requieren credenciales para la autenticación con identidades administradas. La aplicación debe ejecutarse en un recurso de Azure configurado para usar identidades administradas. Para más información, consulte Identidades administradas para recursos de Azure.

Si necesita conectarse a un punto de conexión de nube o de administración distinto de la nube pública Azure predeterminada, establezca las siguientes variables de entorno. Las razones más comunes para establecerlas son si se usa Azure Stack, una nube en una región geográfica diferente o el modelo de implementación clásico de Azure.

Variable de entorno Descripción
AZURE_ENVIRONMENT El nombre del entorno de nube al que se conectará.
AZURE_AD_RESOURCE El identificador de recurso de Active Directory que se usará al conectarse, como el URI de un punto de conexión de administración.

Cuando se usa la autenticación basada en entornos, llame a la función NewAuthorizerFromEnvironment para obtener el objeto autorizador. Este objeto se establece entonces en la propiedad Authorizer de los clientes para permitirles el acceso a Azure.

import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := auth.NewAuthorizerFromEnvironment()

Autenticación en Azure Stack

Para autenticarse en Azure Stack, debe establecer las siguientes variables:

Variable de entorno Descripción
AZURE_AD_ENDPOINT El punto de conexión de Active Directory.
AZURE_AD_RESOURCE El identificador de recurso de Active Directory.

Estas variables se pueden recuperar de la información de metadatos de Azure Stack. Para recuperar los metadatos, abra un explorador web en su entorno de Azure Stack y use la dirección URL: (ResourceManagerURL)/metadata/endpoints?api-version=1.0

El valor de ResourceManagerURL varía según el nombre de la región, el nombre de la máquina y el nombre de dominio completo (FQDN) externo de su implementación de Azure Stack:

Entorno ResourceManagerURL
Kit de desarrollo https://management.local.azurestack.external/
Sistemas integrados https://management.(region).ext-(machine-name).(FQDN)

Para más información sobre cómo usar Azure SDK para Go en Azure Stack, consulte Uso de perfiles de versión de la API con Go en Azure Stack.

Uso de la autenticación basada en archivos

La autenticación basada en archivos usa un formato de archivo generado por la CLI de Azure. Puede crear fácilmente este archivo cuando se crea una nueva entidad de servicio con el parámetro --sdk-auth. Si planea utilizar la autenticación basada en archivos, asegúrese de que se proporciona este argumento al crear una entidad de servicio. Como la CLI imprime la salida en stdout, redirija la salida a un archivo.

az ad sp create-for-rbac --role Contributor \
    --scopes /subscriptions/<subscription_id> \
    --sdk-auth > azure.auth

Establezca la variable de entorno AZURE_AUTH_LOCATION en donde se encuentra el archivo de autorización. La aplicación lee esta variable de entorno y analiza las credenciales que contiene. Si tiene que seleccionar el archivo de autorización en tiempo de ejecución, manipule el entorno del programa mediante la función os.Setenv.

Para cargar la información de autenticación, llame a la función NewAuthorizerFromFile. A diferencia de la autorización basada en entornos, la autorización basada en archivos requiere un punto de conexión de recursos.

import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := NewAuthorizerFromFile(azure.PublicCloud.ResourceManagerEndpoint)

Para más información acerca del uso de entidades de servicio y la administración de los permisos de acceso, consulte Creación de una entidad de servicio con la CLI de Azure.

Uso de la autenticación por tokens del dispositivo

Si desea que los usuarios inicien sesión de forma interactiva, la mejor manera es mediante la autenticación por token de dispositivo. Este flujo de autenticación pasa al usuario un token para pegarlo en un sitio de inicio de sesión de Microsoft, donde luego se autentica con una cuenta de Microsoft Entra. Este método de autenticación admite cuentas que tienen habilitada la autenticación multifactor, a diferencia de la autenticación estándar de nombre de usuario y contraseña.

Para usar la autenticación por tokens del dispositivo, cree un autorizador de DeviceFlowConfig con la función NewDeviceFlowConfig. Llame al autorizador en el objeto resultante para iniciar el proceso de autenticación. La autenticación por flujo de dispositivo bloquea la ejecución del programa hasta que se complete todo el flujo de autenticación.

import "github.com/Azure/go-autorest/autorest/azure/auth"
deviceConfig := auth.NewDeviceFlowConfig(applicationID, tenantID)
authorizer, err := deviceConfig.Authorizer()

Uso de un cliente de autenticación

Si necesita un tipo específico de autenticación y está dispuesto a que el programa haga el trabajo de cargar la información de autenticación del usuario, puede utilizar cualquier cliente que se ajuste a la interfaz auth.AuthorizerConfig. Use un tipo que implementa esta interfaz si:

  • Está escribiendo un programa interactivo
  • Usa archivos de configuración especializados
  • Tiene un requisito que impide el uso de un método de autenticación integrado

Advertencia

Nunca codifique de forma rígida las credenciales de Azure en una aplicación. Poner secretos en un archivo binario de una aplicación hace más fácil su extracción por parte de un atacante, ya se esté ejecutando la aplicación o no. Esto pone en riesgo todos los recursos de los Azure cuyas credenciales están autorizadas.

En la tabla siguiente se enumeran los tipos en el SDK que se ajustan a la interfaz AuthorizerConfig.

Tipo de autenticación Tipo de autorizador
Autenticación basada en certificados ClientCertificateConfig
Credenciales de cliente ClientCredentialsConfig
Identidades administradas de recursos de Azure MSIConfig
Nombre de usuario y contraseña UsernamePasswordConfig

Cree un autenticador con su función New asociada y, después, llame a Authorize en el objeto resultante para realizar la autenticación. Por ejemplo, para usar la autenticación basada en certificado:

import "github.com/Azure/go-autorest/autorest/azure/auth"
certificateAuthorizer := auth.NewClientCertificateConfig(certificatePath, certificatePassword, clientID, tenantID)
authorizerToken, err := certificateAuthorizer.Authorizer()

Pasos siguientes