Uso de MSAL Python con el Administrador de cuentas web

Si va a compilar una aplicación de Windows, puede considerar la posibilidad de simplificar cómo se autentican los usuarios con la ayuda de un agente de autenticación. El Administrador de cuentas web (WAM) es un agente de autenticación que funciona con MSAL Python. WAM solo está disponible en Windows 10 y versiones posteriores, así como Windows Server 2019 y versiones posteriores.

Para obtener más información sobre las ventajas de usar un agente de autenticación, consulte ¿Qué es un agente en la documentación de MSAL.NET?

Uso

Para usar el broker, deberá instalar los paquetes relacionados con el broker, además del paquete principal de MSAL disponible en PyPI:

pip install msal[broker]>=1.20,<2

Si los paquetes relacionados con el agente no están instalados e intenta usar el agente de autenticación, obtendrá el error ImportError: Debe instalar la dependencia por: pip install "msal[broker]>=1.20,2<".

A continuación, cree una instancia de un nuevo PublicClientApplication y establezca enable_broker_on_windows en True. Esto garantizará que MSAL intente comunicarse con WAM en lugar de abrir una nueva ventana del navegador. Si va a escribir una aplicación multiplataforma, también tendrá que usar enable_broker_on_mac, como se describe en el artículo Uso de MSAL Python con un agente de autenticación en macOS.

from msal import PublicClientApplication

app = PublicClientApplication(
    "CLIENT_ID",
    authority="https://login.microsoftonline.com/common",
    enable_broker_on_windows=True)

Ahora puede adquirir un token llamando a acquire_token_interactive y especificando un identificador de la ventana principal mediante parent_window_handle:

result = app.acquire_token_interactive(["User.ReadBasic.All"],
         parent_window_handle=app.CONSOLE_WINDOW_HANDLE)

WAM requiere un identificador de ventana principal para asegurarse de que el cuadro de diálogo se muestra correctamente en la parte superior de la ventana de solicitud. MSAL no lo infiere directamente, ya que hay muchas variables que podrían influir en la ventana a la que debe vincularse WAM, y son los desarrolladores de aplicaciones quienes mejor pueden decidir cuál debe ser esa ventana.

En el caso de las aplicaciones de consola, MSAL lo pone fácil al ofrecer una solución lista para usar para obtener el identificador de la ventana del terminal: CONSOLE_WINDOW_HANDLE. En el caso de las aplicaciones de escritorio, es posible que sea necesario trabajar con la API de Windows para obtener el identificador de ventana. Los paquetes auxiliares, como pywin32 , pueden ayudar con las llamadas API.

Antes de ejecutar la aplicación, asegúrese de configurar la dirección URL de redireccionamiento para la aplicación de escritorio:

Para usar el agente de Windows, la aplicación debe tener configurada la dirección URL de redireccionamiento correcta en el Azure Portal, en la forma de:

ms-appx-web://microsoft.aad.brokerplugin/YOUR_CLIENT_ID

Si la URL de redireccionamiento no está configurada, aparecerá un broker_error similar a (pii). Estado: Response_Status.Status_ApiContractViolation, código de error: 3399614473, etiqueta: 557973642.

Si la configuración y la instanciación son correctas, una vez que ejecute la aplicación debería ver que el intermediario de autenticación entra en acción y permite al usuario seleccionar la cuenta con la que desea autenticarse.

Ejemplo de llamada a WAM desde Python

Vale la pena tener en cuenta que si cambia al uso de la autenticación basada en agente, si el usuario ha iniciado sesión anteriormente y el estado de inicio de sesión sigue siendo válido, la llamada acquire_token_interactive seguirá produciendo un intento silencioso de adquirir un token y solo se le pedirá cuando sea necesario. Si prefiere solicitar confirmación siempre, puede usar este parámetro opcional prompt="select_account".

Diferencias en la experiencia del agente

Dependiendo de la autoridad especificada al crear una instancia de PublicClientApplication, la interfaz de usuario del intermediario puede ser diferente.

/consumers

Se usa para autenticar solo con cuentas de Microsoft personales.

Interfaz de usuario de WAM para consumidores

/common

Se usa para autenticarse con cuentas de Microsoft personales, así como cuentas profesionales y educativas.

INTERFAZ de usuario de WAM para cuentas personales y profesionales

/organizations

Se usa para autenticar únicamente con cuentas profesionales o educativas.

Interfaz de usuario de WAM solo para cuentas profesionales

Si se proporciona login_hint , pero la cuenta aún no está registrada en WAM, la sugerencia se rellenará automáticamente en el campo Correo electrónico o teléfono .

/TENANT_ID

Se utiliza para autenticarse únicamente con cuentas de trabajo y de centro educativo dentro del inquilino especificado.

Interfaz de usuario de WAM para cuentas específicas del inquilino

Si se proporciona login_hint , pero la cuenta aún no está registrada en WAM, la sugerencia se rellenará automáticamente en el campo Correo electrónico o teléfono .