Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Biblioteca de autenticación de Microsoft (MSAL) es un kit de desarrollo de software (SDK) que permite a las aplicaciones llamar al intermediario de inicio de sesión único de Microsoft para Linux, un componente de Linux que se distribuye de forma independiente de la distribución de Linux; sin embargo, se instala mediante un gestor de paquetes con sudo apt install microsoft-identity-broker o sudo dnf install microsoft-identity-broker.
Este componente actúa como intermediario de autenticación, lo que permite a los usuarios de tu aplicación beneficiarse de la integración con cuentas reconocidas por Linux, como la cuenta con la que has iniciado sesión en tus sesiones de Linux para las aplicaciones que usan este intermediario.
El broker también se incluye como dependencia de las aplicaciones desarrolladas por Microsoft (como Portal de empresa). Un ejemplo de cuándo se instala el broker es cuando un equipo Linux se inscribe en la flota de dispositivos de una empresa mediante una solución de gestión de endpoints como Microsoft Intune.
¿Qué es un agente?
Un agente de autenticación 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 las cuentas conectadas. El sistema operativo Linux usa el inicio de sesión único de Microsoft para Linux como intermediario de autenticación. Tiene muchas ventajas para desarrolladores y clientes, entre las que se incluyen:
- Permite el inicio de sesión único: permite a las aplicaciones simplificar la forma en que los usuarios se autentican con Microsoft Entra ID y protege los tokens de actualización de Microsoft Entra ID frente a la exfiltración y el uso indebido
- Seguridad mejorada. Muchas mejoras de seguridad se incorporan en el broker, sin necesidad de actualizar la lógica de la aplicación.
- Compatibilidad de funciones. Gracias al broker, los desarrolladores pueden acceder a amplias funcionalidades del sistema operativo y de los servicios.
- Integración del sistema. Las aplicaciones que utilizan el broker «plug-and-play» con el selector de cuentas integrado permiten al usuario seleccionar rápidamente una cuenta existente en lugar de tener que volver a introducir las mismas credenciales una y otra vez.
- Protección de tokens. El inicio de sesión único de Microsoft para Linux garantiza que los tokens de actualización estén vinculados al dispositivo.
¿Cómo activar el uso del broker?
- En la biblioteca MSAL Python, hemos introducido el indicador
enable_broker_on_linux, que habilita el broker tanto en WSL como en Linux autónomo.- Si su objetivo es habilitar la compatibilidad con el agente intermediario únicamente en WSL en CLI de Azure, puede plantearse modificar el código de la aplicación de CLI de Azure para activar la marca
enable_broker_on_wslexclusivamente en WSL. - Si va a escribir una aplicación multiplataforma, también tendrá que usar
enable_broker_on_windows, como se describe en el artículo Uso de MSAL Python con el Administrador de cuentas web. - Puede establecer cualquier combinación de los siguientes parámetros de inclusión voluntaria como true:
- Si su objetivo es habilitar la compatibilidad con el agente intermediario únicamente en WSL en CLI de Azure, puede plantearse modificar el código de la aplicación de CLI de Azure para activar la marca
| Indicador de suscripción | Si la aplicación se ejecuta en | La aplicación ha registrado esto como URI de redirección para la plataforma de escritorio en el Portal de Azure |
|---|---|---|
| enable_broker_on_windows | Windows 10+ | ms-appx-web://Microsoft. AAD. BrokerPlugin/your_client_id |
| habilitar broker en WSL | WSL | ms-appx-web://Microsoft. AAD. BrokerPlugin/your_client_id |
| habilitar_broker_en_mac | Mac con Portal de empresa instalado | msauth.com.msauth.unsignedapp://auth |
| enable_broker_on_linux | Linux con Intune instalado |
https://login.microsoftonline.com/common/oauth2/nativeclient (DEBE estar habilitado) |
Su aplicación debe admitir URI de redirección específicas del broker. En
Linuxconcreto, la dirección URL del URI de redirección debe ser:https://login.microsoftonline.com/common/oauth2/nativeclientPara 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.33.0b1,<2"Una vez configurado, puede llamar a
acquire_token_interactivepara obtener un token.result = app.acquire_token_interactive(["User.ReadBasic.All"], parent_window_handle=app.CONSOLE_WINDOW_HANDLE)
Parámetros para la compatibilidad con el intermediario
Los siguientes parámetros están disponibles para configurar la compatibilidad con el broker en MSAL Python. Estos parámetros se pueden pasar al PublicClientApplication constructor o al acquire_token_interactive método .
| Parameters: | Tipo | Description |
|---|---|---|
| enable_broker_on_windows | boolean |
Esta configuración solo es efectiva si la aplicación se ejecuta en Windows 10+. Este parámetro tiene como valor predeterminado None, lo que significa que MSAL no usará un agente. New in MSAL Python 1.25.0. |
| enable_broker_on_wsl | boolean |
Esta configuración solo es efectiva si la aplicación se ejecuta en WSL. Este parámetro tiene como valor predeterminado None, lo que significa que MSAL no usará un agente.
New in MSAL Python 1.25.0. |
| habilitar_broker_en_mac | boolean |
Esta configuración solo es efectiva si la aplicación se ejecuta en Mac con Portal de empresa instalado. Este parámetro tiene como valor predeterminado None, lo que significa que MSAL no usará un agente.
New in MSAL Python 1.31.0. |
| enable_broker_on_linux | boolean |
Esta configuración solo es efectiva si la aplicación se ejecuta en Linux con Intune instalado. Este parámetro tiene como valor predeterminado None, lo que significa que MSAL no usará un agente.
New in MSAL Python 1.33.0. |
| parent_window_handle | int |
OPCIONAL |
Notas sobre parent_window_handle
El parent_window_handle parámetro es necesario aunque en Linux no se use. Para las aplicaciones con interfaz gráfica, la ubicación de la ventana de inicio de sesión se determinará según el caso y actualmente no puede asociarse a una ventana específica. En una actualización futura, este parámetro se usará para determinar la ventana principal real .
| Condition | Description |
|---|---|
| La aplicación no quiere usar un agente | no es necesario especificar un parent_window_handle |
| La aplicación opta por usar un agente | parent_window_handle es obligatorio |
| La aplicación es una aplicación de GUI que se ejecuta en el sistema Windows o Mac. | es necesario proporcionar el identificador de ventana, para que la ventana de inicio de sesión aparezca sobre tu ventana |
| La aplicación es una aplicación de consola que se ejecuta en el sistema Windows o Mac. | puede usar un marcador de posición PublicClientApplication.CONSOLE_WINDOW_HANDLE |
| La aplicación está pensada para ser una aplicación multiplataforma | La aplicación debe usar enable_broker_on_windows, como se describe en el artículo Uso de MSAL Python con el Administrador de cuentas web. |
Los comportamientos alternativos del soporte de broker de MSAL Python
MSAL generará un error o recurrirá silenciosamente a flujos sin el broker.
MSAL ignorará enable_broker_… y omitirá el broker en aquellos flujos de autenticación que se sabe que NO son compatibles con el broker. Esto incluye ADFS, B2C, etc. Para otros escenarios en los que «se podría utilizar el broker», consulta más abajo.
MSAL genera un error cuando el desarrollador de la aplicación ha optado por usar el broker, pero no está instalado un paquete “mid-tier” de dependencia directa. El mensaje de error guía al desarrollador de aplicaciones para declarar la dependencia correcta msal[broker]. Aquí generamos un error porque es una acción que los desarrolladores de aplicaciones pueden resolver.
MSAL «desactiva» silenciosamente el broker y recurre a un flujo sin broker cuando, tras haberlo activado, la dependencia se ha instalado pero no se ha podido inicializar. Se prevé que esto ocurriría en un dispositivo cuyo sistema operativo es demasiado antiguo o el componente de agente subyacente no está disponible de alguna manera. No hay mucho que un desarrollador de aplicaciones o el usuario final pueda hacer aquí. Finalmente, la directiva de acceso condicional obligará al usuario a cambiar a otro dispositivo.
MSAL da error cuando el intermediario está habilitado, instalado e inicializado, pero las solicitudes posteriores de token fallan.
Importante
Si los paquetes relacionados con el agente no están instalados y intentará usar el agente de autenticación, obtendrá un error: ImportError: You need to install dependency by: pip install "msal[broker]>=1.xx,<2".
Note
El parent_window_handle parámetro es necesario aunque en Linux no se use. Para las aplicaciones con interfaz gráfica, la ubicación de la ventana de inicio de sesión se determinará según el caso y actualmente no puede asociarse a una ventana específica. En una actualización futura, este parámetro se usará para determinar la ventana principal real .
Almacenamiento en caché de tokens
El intermediario de autenticación se encarga del almacenamiento en caché de los tokens de actualización y de acceso. No es necesario configurar el almacenamiento en caché personalizado.
Creación de una aplicación de ejemplo
Puede encontrar una aplicación de ejemplo que muestre cómo usar MSAL Python con el agente de autenticación en Linux en el repositorio de Python GitHub de MSAL. La aplicación de ejemplo se encuentra en el directorio samples/console_app e incluye ejemplos de cómo utilizar el intermediario para la autenticación.
Registro de aplicaciones
Actualice el registro de la aplicación en el portal de Azure para que incluya el URI de redirección específico del intermediario para Linux:
https://login.microsoftonline.com/common/oauth2/nativeclient
Dependencias de Linux
En primer lugar, compruebe si tiene python3 instalado en la distribución de Linux.
python3 --version
Si no es así, instálelo mediante el administrador de paquetes para la distribución.
Para instalar en la distribución de Linux basada en Debian/Ubuntu:
sudo add-apt-repository -y universe
sudo apt update
sudo apt install python3 python3-pip libwebkit2gtk-4.1-dev -y
Dependencias de Python
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.33.0b1,<2"
Proyecto Create
Una vez configurado, puede llamar a acquire_token_interactive para obtener un token.
import sys # For simplicity, we'll read config file from 1st CLI param sys.argv[1]
import json
import logging
import requests
import msal
# Optional logging
# logging.basicConfig(level=logging.DEBUG)
var_authority = "https://login.microsoftonline.com/common"
var_client_id = "your-client-id-here" # Replace with your app's client ID
var_username = "your-username-here" # Replace with your username, e.g., "
var_scope = ["User.ReadBasic.All"]
# Removed unused variable to avoid confusion
# Create a preferably long-lived app instance which maintains a token cache (Default cache is in memory only).
app = msal.PublicClientApplication(
var_client_id,
authority=var_authority,
enable_broker_on_windows=True,
enable_broker_on_wsl=True
)
# The pattern to acquire a token looks like this.
result = None
# Firstly, check the cache to see if this end user has signed in before
accounts = app.get_accounts(username=var_username)
if accounts:
logging.info("Account(s) exists in cache, probably with token too. Let's try.")
result = app.acquire_token_silent(var_scope, account=accounts[0])
if not result:
logging.info("No suitable token exists in cache. Let's get a new one from AAD.")
result = app.acquire_token_interactive(var_scope,parent_window_handle=app.CONSOLE_WINDOW_HANDLE)
if "access_token" in result:
print("Access token is: %s" % result['access_token'])
else:
print(result.get("error"))
print(result.get("error_description"))
print(result.get("correlation_id")) # You may need this when reporting a bug
if 65001 in result.get("error_codes", []): # Not mean to be coded programatically, but...
# AAD requires user consent for U/P flow
print("Visit this to consent:", app.get_authorization_request_url(config["scope"]))