Microsoft Authentication Library (MSAL) pour Python

La bibliothèque Microsoft Authentication Library (MSAL) pour Python vous permet de connecter des utilisateurs ou des applications avec des identités Microsoft (Microsoft Entra ID, comptes Microsoft et Microsoft Entra ID comptes). À l’aide de MSAL Python, vous pouvez acquérir des jetons de Microsoft Entra ID pour appeler des API web protégées telles que Microsoft Graph, d’autres API Microsoft ou vos propres API.

Prerequisites

Installer le package

Installez le paquet MSAL pour Python. Vous pouvez trouver MSAL Python sur PyPI.

pip install msal

Concepts d’identité

MSAL Python fait partie de l’écosystème Plateforme d'identités Microsoft. Familiarisez-vous avec les concepts suivants pour utiliser efficacement MSAL Python pour protéger vos applications et API :

Scénarios d’usage

Pour utiliser MSAL Python, inscrivez une application auprès du Plateforme d'identités Microsoft. Vous aurez besoin d'un compte Azure avec un abonnement actif. Créez un compte gratuit si vous n’en avez pas. Vous pouvez enregistrer votre application dans un tenant client ou un tenant de personnel.

Les applications peuvent utiliser msAL Python pour acquérir des jetons pour accéder aux API protégées. Différents types d’applications acquièrent des jetons à l’aide de différents flux d’authentification. Les types d’applications pris en charge incluent les applications de bureau, les applications web, les API web et les applications s’exécutant sur des appareils qui n’ont pas de navigateur (par exemple, les appareils IoT).

Dans MSAL Python, les applications sont classées comme suit :

  • Applications clientes publiques (bureau et mobile). Ces types d’applications ne peuvent pas stocker les secrets d’application en toute sécurité.
  • Applications clientes confidentielles (applications web, API web et applications démon). Ces types d’applications stockent en toute sécurité un secret inscrit auprès de Microsoft Entra ID.

Pour plus d’informations, consultez la documentation sur les applications clientes publiques et confidentielles et les différents types d’applications et leurs flux d’authentification dans le Plateforme d'identités Microsoft.

Après avoir déterminé si votre application est une application cliente publique ou confidentielle, vous pouvez utiliser MSAL Python pour acquérir des jetons pour différents scénarios.

Utilisation de base

L’acquisition de jetons avec MSAL Python suit un modèle en trois étapes. Il y aura des variations pour différents flux. Si vous souhaitez les voir en action, téléchargez nos exemples.

  1. MSAL s’appuie sur une séparation propre entre les applications clientes publiques et confidentielles. Par conséquent, créez une instance de PublicClientApplication ou de ConfidentialClientApplication et réutilisez-la tout au long du cycle de vie de votre application. Par exemple, pour une application cliente publique, le code d’initialisation peut ressembler à ceci :

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

    La valeur de l’autorité varie en fonction du type de comptes dans lequel vous vous connectez et du type de locataire dans lequel votre application est inscrite. Par exemple, pour vous connecter à la fois à des comptes Microsoft professionnels et personnels créés dans des locataires de main-d’œuvre (Microsoft Entra ID), vous utiliseriez https://login.microsoftonline.com/common. Pour les comptes clients approvisionnés dans les locataires clients, votre autorité prend une forme telle que https://<subdomain>.ciamlogin.com. Pour plus d’informations, consultez la documentation de l’émetteur de jeton.

  2. Essayez d’abord d’obtenir les jetons du cache. Le modèle d’API dans MSAL vous permet de contrôler explicitement comment utiliser le cache de jetons. Bien que la partie de mise en cache soit techniquement facultative, nous vous recommandons vivement de l’utiliser dans votre application. À l’aide du cache, vous pouvez vous assurer que vous n’effectuez pas d’appels d’API supplémentaires et gérez automatiquement l’actualisation du jeton.

    # 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. S'il n'existe aucun jeton approprié dans le cache ou si vous avez choisi d'ignorer l'étape précédente, envoyez une demande à Microsoft Entra ID pour obtenir un jeton. Il existe différentes méthodes basées sur votre type de client et votre scénario, mais à des fins de l’exemple, nous montrons comment utiliser acquire_token_interactive, ce qui invite l’utilisateur à fournir ses informations d’identification.

    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. Enregistrez le code dans un fichier Python localement, par exemple msaltest.py.

  5. Exécutez le code en exécutant python .\msalpytest.py. Le visuel suivant montre l’expérience de connexion pour cet exemple.

    Exemple d’application invitant l’utilisateur à se connecter avec son compte

  6. Une fois l’authentification terminée et que vous avez fermé le navigateur, vous devez être en mesure de voir le jeton d’accès imprimé dans le terminal.

Meilleures pratiques pour une application robuste prête pour l’entreprise

Vous pouvez acquérir un jeton pour une API web protégée à l’aide de MSAL Python. Vous n’avez pas non plus à vous charger vous-même de l’actualisation des jetons d’authentification. Toutefois, pour créer des applications robustes et prêtes pour l’entreprise, vous devrez faire un peu plus. Par exemple, vous souhaiterez :

  • Gérez les exceptions, à la fois lorsque vous achetez un jeton, mais aussi lorsque vous appelez l’API web protégée. En particulier, si votre application s’exécute dans un locataire Microsoft Entra où les administrateurs du locataire ont défini des stratégies d’accès conditionnel pour appliquer l’authentification multifacteur (MFA), vous devez gérer un défi de revendication.

  • Vous pouvez activer la journalisation pour résoudre les problèmes de votre application et aider vos utilisateurs, tout en respectant leur confidentialité et en étant conformes au RGPD.

Échantillons

Il existe plusieurs exemples que vous pouvez utiliser pour prendre en main MSAL Python.

References

  • Référentiel de bibliothèques MSAL Python sur GitHub
  • Versions de MSAL Python sur GitHub.

Voir aussi