Compartir a través de


Autenticación de aplicaciones de Python a servicios de Azure durante el desarrollo local mediante la autenticación intermediada

La autenticación con intermediación recopila credenciales de usuario mediante el agente de autenticación del sistema para autenticar una aplicación. Un agente de autenticación del sistema es una aplicación que se ejecuta en la máquina de un usuario que administra los protocolos de enlace de autenticación y el mantenimiento de tokens para todas las cuentas conectadas.

La autenticación asincrónica ofrece las siguientes ventajas:

  • Habilita una sola Sign-On (SSO): Permite a las aplicaciones simplificar cómo se autentican los usuarios con el identificador de Entra de Microsoft y protegen los tokens de actualización del id. de Microsoft Entra de la filtración y el uso incorrecto.
  • Seguridad mejorada: Muchas mejoras de seguridad se entregan con el agente, sin necesidad de actualizar la lógica de la aplicación.
  • Compatibilidad mejorada con características: Con la ayuda del agente, los desarrolladores pueden acceder a funcionalidades enriquecidas de sistema operativo y servicio.
  • Integración del sistema: Aplicaciones que usan el complemento de agente y juegan con el selector de cuentas integrado, lo que permite al usuario elegir rápidamente una cuenta existente en lugar de volver a escribir las mismas credenciales sobre y más.
  • Protección de tokens: Garantiza que los tokens de actualización están enlazados al dispositivo y permiten a las aplicaciones adquirir tokens de acceso enlazados al dispositivo. Consulte Protección de tokens.

Windows proporciona un agente de autenticación denominado Administrador de cuentas web (WAM). WAM permite a los proveedores de identidades, como Microsoft Entra ID, conectar de forma nativa al sistema operativo y proporcionar servicios de inicio de sesión seguros a las aplicaciones. La autenticación asincrónica habilita la aplicación para todas las operaciones permitidas por las credenciales de inicio de sesión interactivas.

Se admiten cuentas personales de Microsoft y cuentas profesionales o educativas. En las versiones compatibles de Windows, la interfaz de usuario predeterminada basada en explorador se reemplaza por una experiencia de autenticación más fluida, similar a las aplicaciones de Windows integradas.

macOS no incluye de forma nativa un agente de autenticación integrado. La biblioteca cliente de Azure Identity implementa características de autenticación asincrónicas mediante mecanismos específicos de la plataforma y puede integrarse con aplicaciones como El Portal de empresa de Microsoft cuando se administran los dispositivos. Para obtener más información, consulte el complemento de Microsoft Enterprise SSO para dispositivos Apple.

Linux usa el inicio de sesión único de Microsoft para Linux como agente de autenticación.

Configuración de la aplicación para la autenticación asincrónica

Para habilitar la autenticación asincrónica en la aplicación, siga estos pasos:

  1. En Azure Portal, vaya a Microsoft Entra ID y seleccione Registros de aplicaciones en el menú izquierdo.

  2. Seleccione el registro de la aplicación y, a continuación, seleccione Autenticación.

  3. Agregue el URI de redireccionamiento adecuado al registro de la aplicación a través de una configuración de plataforma:

    1. En Configuraciones de plataforma, seleccione + Agregar una plataforma.

    2. En Configurar plataformas, seleccione el icono del tipo de aplicación (plataforma) para configurar sus opciones, como aplicaciones móviles y de escritorio.

    3. En URI de redirección personalizados, escriba el siguiente URI de redirección para la plataforma:

      Plataforma URI de redirección
      Windows 10+ o WSL ms-appx-web://Microsoft.AAD.BrokerPlugin/{your_client_id}
      macOS msauth.com.msauth.unsignedapp://auth para aplicaciones sin firmar
      msauth.{bundle_id}://auth para aplicaciones firmadas
      Linux https://login.microsoftonline.com/common/oauth2/nativeclient

      Reemplace {your_client_id} o {bundle_id} por el identificador de aplicación (cliente) del panel Información general del registro de la aplicación.

    4. Seleccione Configurar.

    Para más información, consulte Adición de un URI de redirección a un registro de aplicación.

  4. De nuevo en el panel Autenticación , en Configuración avanzada, seleccione para Permitir flujos de cliente públicos.

  5. Seleccione Guardar para aplicar los cambios.

  6. Para autorizar la aplicación para recursos específicos, vaya al recurso en cuestión, seleccione Permisos de API y habilite Microsoft Graph y otros recursos a los que quiera acceder.

    Importante

    También debe ser el administrador del inquilino para conceder el consentimiento a la aplicación al iniciar sesión por primera vez.

Asignación de roles

Para ejecutar el código de la aplicación correctamente con la autenticación asincrónica, conceda a su cuenta de usuario permisos mediante el control de acceso basado en rol (RBAC) de Azure. Asigne un rol adecuado a su cuenta de usuario para el servicio de Azure correspondiente. Por ejemplo:

  • Azure Blob Storage: asigne el rol Colaborador de datos de la cuenta de almacenamiento .
  • Azure Key Vault: asigne el rol Oficial de secretos de Key Vault .

Si se especifica una aplicación, debe tener permisos de API establecidos para user_impersonation Acceso a Azure Storage (paso 6 de la sección anterior). Este permiso de API permite que la aplicación acceda a Azure Storage en nombre del usuario que inició sesión después de conceder el consentimiento durante el inicio de sesión.

Implementación del código

En el ejemplo siguiente se muestra el uso de InteractiveBrowserBrokerCredential para autenticarse con BlobServiceClient.

  1. Instale los paquetes. pywin32 se usará en Windows para recuperar la ventana actualmente en primer plano.

    pip install azure-identity-broker pywin32
    
  2. Obtenga una referencia a la ventana primaria en la que debería aparecer el cuadro de diálogo del selector de cuentas. En el ejemplo de código siguiente, será la línea:

    current_window_handle = win32gui.GetForegroundWindow()
    
  3. Cree una instancia de InteractiveBrowserBrokerCredential proporcionando la referencia de la ventana padre. En el ejemplo de código final, será la línea:

    credential = InteractiveBrowserBrokerCredential(parent_window_handle=current_window_handle)
    
  4. Utiliza credential para acceder al servicio de Azure, que es Almacenamiento de blobs en este ejemplo.

Este es el ejemplo de código final:

import win32gui
from azure.identity.broker import InteractiveBrowserBrokerCredential
from azure.storage.blob import BlobServiceClient

# Get the handle of the current window
current_window_handle = win32gui.GetForegroundWindow()

# To authenticate and authorize with an app, use the following line to get a credential and
# substitute the <app_id> and <tenant_id> placeholders with the values for your app and tenant.
# credential = InteractiveBrowserBrokerCredential(parent_window_handle=current_window_handle, client_id=<app_id>, tenant_id=<tenant_id>)
credential = InteractiveBrowserBrokerCredential(parent_window_handle=current_window_handle)
client = BlobServiceClient("https://<storage-account-name>.blob.core.windows.net/", credential=credential)

# Prompt for credentials appears on first use of the client
for container in client.list_containers():
    print(container.name)

Para un control más exacto, como establecer un tiempo de espera, puede proporcionar argumentos específicos a InteractiveBrowserBrokerCredential como timeout.

Para que el código se ejecute correctamente, a la cuenta de usuario se le debe asignar un rol de Azure en la cuenta de almacenamiento que permita el acceso a contenedores de blobs, como colaborador de datos de la cuenta de almacenamiento. Si se especifica una aplicación, debe tener permisos de API establecidos para user_impersonation Acceso a Azure Storage (paso 6 de la sección anterior). Este permiso de API permite que la aplicación acceda a Azure Storage en nombre del usuario que inició sesión después de conceder el consentimiento durante el inicio de sesión.

En la captura de pantalla siguiente se muestra la experiencia de autenticación interactiva y asincrónica alternativa:

Captura de pantalla que muestra la experiencia de inicio de sesión de Windows al usar una instancia interactiveBrowserCredential habilitada para broker para autenticar a un usuario.

Importante

La compatibilidad con macOS existe en azure-identity-broker las versiones 1.3.0 y posteriores.

En el ejemplo siguiente se muestra el uso de un InteractiveBrowserBrokerCredential para autenticarse con el BlobServiceClient.

  1. Instale los paquetes. msal (Biblioteca de autenticación de Microsoft) se usa para proporcionar una constante para el parent_window_handle parámetro .

    pip install azure-identity-broker msal
    
  2. Cree una instancia de InteractiveBrowserBrokerCredential proporcionando la referencia de la ventana principal. Esto requiere que obtenga una referencia a la ventana principal sobre la cual debe aparecer el cuadro de diálogo del selector de cuentas (proporcionado por el módulo msal). En el ejemplo de código siguiente, será la línea:

    credential = InteractiveBrowserBrokerCredential(
        parent_window_handle=msal.PublicClientApplication.CONSOLE_WINDOW_HANDLE
    )
    
  3. Para acceder al servicio de Azure, que en este ejemplo es Blob Storage, utilice el credential.

Este es el ejemplo de código final:

from azure.identity.broker import InteractiveBrowserBrokerCredential
from azure.storage.blob import BlobServiceClient
import msal

credential = InteractiveBrowserBrokerCredential(
    parent_window_handle=msal.PublicClientApplication.CONSOLE_WINDOW_HANDLE
)

client = BlobServiceClient("https://<storage-account-name>.blob.core.windows.net/", credential=credential)

# Prompt for credentials appears on first use of the client
for container in client.list_containers():
    print(container.name)

Para obtener más información sobre el uso de MSAL Python con agentes de autenticación en macOS, consulte Uso de MSAL Python con un agente de autenticación en macOS.

Para un control más exacto, como establecer un tiempo de espera, puede proporcionar argumentos específicos a InteractiveBrowserBrokerCredential como timeout.

Para que el código se ejecute correctamente, a la cuenta de usuario se le debe asignar un rol de Azure en la cuenta de almacenamiento que permita el acceso a contenedores de blobs, como colaborador de datos de la cuenta de almacenamiento. Si se especifica una aplicación, debe tener permisos de API establecidos para user_impersonation Acceso a Azure Storage (paso 6 de la sección anterior). Este permiso de API permite que la aplicación acceda a Azure Storage en nombre del usuario que inició sesión después de conceder el consentimiento durante el inicio de sesión.

En la captura de pantalla siguiente se muestra la experiencia de autenticación interactiva y asincrónica alternativa:

Captura de pantalla que muestra la experiencia de inicio de sesión de macOS al usar una instancia interactiveBrowserCredential habilitada para broker para autenticar a un usuario.

Importante

La compatibilidad con Linux existe en azure-identity-broker las versiones 1.3.0 y posteriores.

En el ejemplo siguiente se muestra el uso de InteractiveBrowserBrokerCredential para autenticarse con BlobServiceClient.

  1. Instale los paquetes. msal (Biblioteca de autenticación de Microsoft) se usa para proporcionar una constante para el parent_window_handle parámetro .

    pip install azure-identity-broker msal
    
  2. Cree una instancia de InteractiveBrowserBrokerCredential pasando la referencia de la ventana principal. Esto requiere que obtenga una referencia a la ventana principal encima de la cual debe aparecer el cuadro de diálogo del selector de cuentas (proporcionado por el módulo msal). En el ejemplo de código siguiente, será la línea:

    credential = InteractiveBrowserBrokerCredential(
        parent_window_handle=msal.PublicClientApplication.CONSOLE_WINDOW_HANDLE
    )
    
  3. Usa el credential para acceder al servicio de Azure, que en este ejemplo es el almacenamiento de blobs.

Este es el ejemplo de código final:

from azure.identity.broker import InteractiveBrowserBrokerCredential
from azure.storage.blob import BlobServiceClient
import msal

credential = InteractiveBrowserBrokerCredential(
    parent_window_handle=msal.PublicClientApplication.CONSOLE_WINDOW_HANDLE
)

client = BlobServiceClient("https://<storage-account-name>.blob.core.windows.net/", credential=credential)

# Prompt for credentials appears on first use of the client
for container in client.list_containers():
    print(container.name)

Asegúrese de que tiene instaladas las dependencias de Linux en la distribución de Linux antes de ejecutar este ejemplo de código. Además, hay instrucciones independientes para WSL en función de la distribución.

Para un control más exacto, como establecer un tiempo de espera, puede proporcionar argumentos específicos a InteractiveBrowserBrokerCredential como timeout.

Para que el código se ejecute correctamente, a la cuenta de usuario se le debe asignar un rol de Azure en la cuenta de almacenamiento que permita el acceso a contenedores de blobs, como colaborador de datos de la cuenta de almacenamiento. Si se especifica una aplicación, debe tener permisos de API establecidos para user_impersonation Acceso a Azure Storage (paso 6 de la sección anterior). Este permiso de API permite que la aplicación acceda a Azure Storage en nombre del usuario que inició sesión después de conceder el consentimiento durante el inicio de sesión.

En el vídeo siguiente se muestra la experiencia de autenticación interactiva y asincrónica alternativa:

Gif animado que muestra la experiencia de inicio de sesión de Linux al usar una instancia interactiveBrowserCredential habilitada para broker para autenticar a un usuario.