Biblioteca de autenticación de Microsoft (MSAL) para Python

La biblioteca de Biblioteca de autenticación de Microsoft (MSAL) para Python permite iniciar sesión de usuarios o aplicaciones con identidades de Microsoft (Microsoft Entra ID, cuentas de Microsoft y Microsoft Entra ID cuentas). Con MSAL Python, puede adquirir tokens de Microsoft Entra ID para llamar a API web protegidas, como Microsoft Graph, otras API de Microsoft o sus propias API.

Prerequisites

Instalar el paquete

Instale el paquete MSAL para Python. Puede encontrar MSAL Python en PyPI.

pip install msal

Conceptos de identidad

MSAL Python forma parte del ecosistema de Plataforma de identidad de Microsoft. Familiarícese con los siguientes conceptos para usar de forma eficaz MSAL Python para proteger las aplicaciones y las API:

Escenarios de uso

Para usar MSAL para Python, registre una aplicación en la plataforma de identidad de Microsoft. Necesitará una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita si no tiene una. Puedes registrar tu aplicación en un tenant de cliente o en un tenant de plantilla.

Las aplicaciones pueden usar msal Python para adquirir tokens para acceder a las API protegidas. Los distintos tipos de aplicación adquieren tokens mediante diferentes flujos de autenticación. Los tipos de aplicación admitidos incluyen aplicaciones de escritorio, aplicaciones web, API web y aplicaciones que se ejecutan en dispositivos que no tienen un explorador (como dispositivos IoT).

En MSAL Python, las aplicaciones se clasifican de la siguiente manera:

Para obtener más información, consulte la documentación sobre aplicaciones cliente públicas y cliente confidencial y los distintos tipos de aplicación y sus flujos de autenticación en la Plataforma de identidad de Microsoft.

Después de determinar si la aplicación es una aplicación cliente pública o confidencial, puede usar MSAL Python para adquirir tokens para distintos escenarios.

Uso básico

La adquisición de tokens con MSAL Python sigue un patrón de tres pasos. Habrá algunas variaciones para distintos flujos. Si desea verlos en acción, descargue nuestros ejemplos.

  1. MSAL se basa en una separación limpia entre el cliente público y las aplicaciones cliente confidenciales. Por lo tanto, cree una PublicClientApplication instancia o ConfidentialClientApplication y reutilícela durante el ciclo de vida de la aplicación. Por ejemplo, para una aplicación cliente pública, el código de inicialización podría tener este aspecto:

    from msal import PublicClientApplication
    
    app = PublicClientApplication(
        "your_client_id",
        authority="https://login.microsoftonline.com/common")
    

    El valor de autoridad varía según el tipo de cuentas en las que inicie sesión y el tipo de inquilino en el que se registra la aplicación. Por ejemplo, para iniciar sesión tanto en cuentas de Microsoft profesionales como personales aprovisionadas en tenants de plantilla (Microsoft Entra ID), utilizarías https://login.microsoftonline.com/common. Para cuentas de cliente aprovisionadas en tenants de cliente, tu autoridad tendrá un formato similar a https://<subdomain>.ciamlogin.com. Para más información, consulte la documentación del emisor de tokens.

  2. Pruebe y obtenga primero los tokens de la memoria caché. El modelo de API de MSAL proporciona control explícito sobre cómo usar la caché de tokens. Aunque la parte de almacenamiento en caché es técnicamente opcional, se recomienda encarecidamente usarla en la aplicación. Con la memoria caché, puede asegurarse de que no realiza ninguna llamada API adicional y controlar la actualización del token automáticamente.

    # initialize result variable to hole the token response
    result = None 
    
    # We now check the cache to see
    # whether we already have some accounts that the end user already used to sign in before.
    accounts = app.get_accounts()
    if accounts:
        # If so, you could then somehow display these accounts and let end user choose
        print("Pick the account you want to use to proceed:")
        for a in accounts:
            print(a["username"])
        # Assuming the end user chose this one
        chosen = accounts[0]
        # Now let's try to find a token in cache for this account
        result = app.acquire_token_silent(["User.Read"], account=chosen)
    
  3. Si no hay ningún token adecuado en la memoria caché o eligió omitir el paso anterior, envíe una solicitud a Microsoft Entra ID para obtener un token. Hay diferentes métodos basados en el tipo de cliente y el escenario, pero para los fines del ejemplo se muestra cómo usar acquire_token_interactive, que solicita al usuario que proporcione sus credenciales.

    if not result:
        # So no suitable token exists in cache. Let's get a new one from Azure AD.
        result = app.acquire_token_interactive(scopes=["User.Read"])
    if "access_token" in result:
        print(result["access_token"])  # Yay!
    else:
        print(result.get("error"))
        print(result.get("error_description"))
        print(result.get("correlation_id"))  # You may need this when reporting a bug
    
  4. Guarde el código en un archivo Python localmente, como msaltest.py.

  5. Ejecute el código ejecutando python .\msalpytest.py. La siguiente imagen muestra la experiencia de inicio de sesión de este ejemplo.

    Ejemplo de una aplicación que solicita al usuario que inicie sesión con su cuenta

  6. Una vez completada la autenticación y cerrado el explorador, debería poder ver el token de acceso impreso en el terminal.

Procedimientos recomendados para una aplicación sólida preparada para la empresa

Puede adquirir un token para una API web protegida mediante MSAL Python. Tampoco tienes que encargarte tú mismo de la actualización de los tokens. Sin embargo, para crear aplicaciones sólidas y preparadas para la empresa, tendrá que hacer un poco más. Por ejemplo, querrá:

  • Controle las excepciones, ambas al adquirir un token, pero también al llamar a la API web protegida. En concreto, si su aplicación se ejecuta en un inquilino de Microsoft Entra en el que los administradores del inquilino han configurado directivas de acceso condicional para exigir la autenticación multifactorial (MFA), deberá administrar un desafío de reclamación.

  • Es posible que quiera habilitar el registro para solucionar problemas de la aplicación y ayudar a los usuarios, al tiempo que respeta su privacidad y cumple con el RGPD.

Samples

Hay varios ejemplos que puede usar para empezar a trabajar con MSAL Python.

  • Ejemplos del repositorio de biblioteca. En estos ejemplos se muestran las distintas configuraciones y flujos de autenticación que se implementan mediante MSAL Python.
  • Un único repositorio con ejemplos usados en nuestra documentación. Estos ejemplos tienen documentación complementaria para ayudarle a compilarlos y replicarlos desde cero.

References

  • Repositorio de biblioteca de MSAL Python en GitHub
  • Lanzamientos de MSAL Python en GitHub.

Consulte también