Microsoft Authentication Library (MSAL) dla Python

Biblioteka Microsoft Authentication Library (MSAL) dla Python umożliwia logowanie użytkowników lub aplikacji przy użyciu tożsamości Microsoft (Microsoft Entra ID, kont Microsoft i Microsoft Entra ID konta). Korzystając z biblioteki MSAL dla języka Python, można uzyskiwać tokeny dostępu z usługi Microsoft Entra ID do wywoływania chronionych internetowych interfejsów API, takich jak Microsoft Graph, inne interfejsy API firmy Microsoft lub własne interfejsy API.

Wymagania wstępne

Instalowanie pakietu

Zainstaluj bibliotekę MSAL dla pakietu Python. Bibliotekę MSAL dla języka Python można znaleźć w serwisie PyPI.

pip install msal

Pojęcia dotyczące tożsamości

Python MSAL jest częścią ekosystemu Platforma tożsamości Microsoft. Zapoznaj się z następującymi pojęciami, aby efektywnie używać Python biblioteki MSAL w celu ochrony aplikacji i interfejsów API:

Scenariusze użycia

Aby użyć Python MSAL, zarejestruj aplikację w Platforma tożsamości Microsoft. Będziesz potrzebować konta Azure z aktywną subskrypcją. Utwórz bezpłatne konto , jeśli go nie masz. Aplikację można zarejestrować w dzierżawcy klienta lub dzierżawcy pracowniczym.

Aplikacje mogą używać Python MSAL do uzyskiwania tokenów na potrzeby uzyskiwania dostępu do chronionych interfejsów API. Różne typy aplikacji uzyskują tokeny przy użyciu różnych przepływów uwierzytelniania. Obsługiwane typy aplikacji obejmują aplikacje klasyczne, aplikacje internetowe, internetowe interfejsy API i aplikacje działające na urządzeniach, które nie mają przeglądarki (np. urządzeń IoT).

W Python biblioteki MSAL aplikacje są podzielone na kategorie w następujący sposób:

  • Publiczne aplikacje klienckie (komputery i urządzenia przenośne). Tego typu aplikacje nie mogą przechowywać kluczy tajnych aplikacji w bezpieczny sposób.
  • Poufne aplikacje klienckie (aplikacje internetowe, internetowe interfejsy API i aplikacje demona). Aplikacje tego typu bezpiecznie przechowują klucz tajny zarejestrowany w usłudze Microsoft Entra ID.

Aby uzyskać więcej informacji, zobacz dokumentację dotyczącą aplikacji klienta publicznego i poufnego klienta oraz różnych typów aplikacji i ich przepływów uwierzytelniania w Platforma tożsamości Microsoft.

Po ustaleniu, czy aplikacja jest publiczną, czy poufną aplikacją kliencką, możesz użyć Python biblioteki MSAL do uzyskania tokenów w różnych scenariuszach.

Podstawowy sposób użycia

Uzyskiwanie tokenów przy użyciu biblioteki MSAL Python jest zgodne ze wzorcem trzyetapowym. Istnieją pewne odmiany dla różnych przepływów. Jeśli chcesz zobaczyć je w działaniu, pobierz nasze przykłady.

  1. Biblioteka MSAL opiera się na wyraźnym rozróżnieniu między aplikacjami klienckimi publicznymi i poufnymi. Dlatego utwórz wystąpienie PublicClientApplication lub ConfidentialClientApplication i używaj go ponownie przez cały cykl życia aplikacji. Na przykład w przypadku publicznej aplikacji klienckiej kod inicjowania może wyglądać następująco:

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

    Wartość parametru authority różni się w zależności od typu kont, na które się logujesz, oraz rodzaju tenanta, w którym zarejestrowana jest aplikacja. Na przykład aby zalogować się zarówno do służbowych, jak i osobistych kont Microsoft skonfigurowanych w dzierżawach pracowniczych (Microsoft Entra ID), należy użyć polecenia https://login.microsoftonline.com/common. W przypadku kont klientów utworzonych w dzierżawach klienta parametr authority będzie mieć postać podobną do https://<subdomain>.ciamlogin.com. Aby uzyskać więcej informacji, zobacz dokumentację wystawcy tokenu.

  2. Najpierw spróbuj uzyskać tokeny z pamięci podręcznej. Model interfejsu API w usłudze MSAL zapewnia jawną kontrolę nad sposobem korzystania z pamięci podręcznej tokenów. Chociaż część buforowania jest technicznie opcjonalna, zdecydowanie zalecamy użycie jej w aplikacji. Korzystając z pamięci podręcznej, możesz mieć pewność, że nie wykonasz żadnych dodatkowych wywołań interfejsu API i automatycznie obsłużysz odświeżanie tokenu.

    # 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. Jeśli w pamięci podręcznej nie ma odpowiedniego tokenu lub chcesz pominąć poprzedni krok, wyślij żądanie do Microsoft Entra ID, aby uzyskać token. Istnieją różne metody oparte na typie klienta i scenariuszu, ale na potrzeby przykładu pokazano, jak używać acquire_token_interactivemetody , która monituje użytkownika o podanie swoich poświadczeń.

    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. Zapisz kod w pliku Python lokalnie, na przykład msaltest.py.

  5. Uruchom kod, wykonując polecenie python .\msalpytest.py. Poniższy element wizualny przedstawia proces logowania dla tego przykładu.

    Przykład aplikacji z monitem użytkownika o zalogowanie się przy użyciu konta

  6. Po zakończeniu uwierzytelniania i zamknięciu przeglądarki powinien być widoczny token dostępu wydrukowany w terminalu.

Najlepsze rozwiązania dotyczące niezawodnej aplikacji gotowej dla przedsiębiorstw

Token dla chronionego internetowego interfejsu API można uzyskać przy użyciu Python MSAL. Nie musisz również samodzielnie obsługiwać odświeżania tokenów. Jednak aby tworzyć niezawodne, gotowe do użycia aplikacje dla przedsiębiorstw, trzeba zrobić nieco więcej. Na przykład warto:

  • Obsługuj wyjątki zarówno podczas uzyskiwania tokenu, jak i podczas wywoływania chronionego interfejsu Web API. W szczególności, jeśli aplikacja działa w dzierżawie usługi Microsoft Entra, w której administratorzy dzierżawy skonfigurowali zasady Conditional Access w celu wymuszenia uwierzytelniania wieloskładnikowego (MFA), trzeba będzie obsłużyć żądanie oświadczeń.

  • Możesz włączyć rejestrowanie , aby rozwiązywać problemy z aplikacją i pomagać użytkownikom, jednocześnie przestrzegając ich prywatności i zgodności z RODO.

Przykłady

Dostępnych jest kilka przykładów, których można użyć, aby zacząć pracę z biblioteką MSAL dla języka Python.

  • Przykłady z repozytorium biblioteki. Te przykłady przedstawiają różne konfiguracje i przepływy uwierzytelniania, które można zaimplementować przy użyciu biblioteki MSAL dla języka Python.
  • Pojedyncze repozytorium z przykładami używanymi w naszej dokumentacji. Te przykłady zawierają dokumentację pomocniczą, która ułatwia tworzenie i replikowanie ich od podstaw.

References

Zobacz także