Włącz funkcję SSO w natywnym systemie Linux przy użyciu biblioteki MSAL Python

Microsoft Authentication Library (MSAL) to zestaw Software Development Kit (SDK), który umożliwia aplikacjom wywoływanie brokera Microsoft Single Sign-on to Linux, komponentu systemu Linux dostarczanego niezależnie od dystrybucji systemu Linux, instalowanego jednak za pomocą menedżera pakietów przy użyciu sudo apt install microsoft-identity-broker lub sudo dnf install microsoft-identity-broker.

Ten składnik działa jako broker uwierzytelniania, dzięki czemu użytkownicy aplikacji mogą korzystać z integracji z kontami znanymi z systemu Linux — na przykład konto zalogowane do sesji systemu Linux dla aplikacji korzystających z brokera.

Broker jest również powiązany jako zależność aplikacji opracowanych przez Microsoft (na przykład Portal firmy)). Przykładem instalacji brokera jest zarejestrowanie komputera z systemem Linux w firmie za pośrednictwem rozwiązania do zarządzania punktami końcowymi, takiego jak Microsoft Intune.

Co to jest broker

Broker uwierzytelniania to aplikacja uruchamiana na komputerze użytkownika, która zarządza uzgadnianiami uwierzytelniania i konserwacją tokenów dla połączonych kont. System operacyjny Linux używa mechanizmu logowania jednokrotnego firmy Microsoft dla systemu Linux jako brokera uwierzytelniania. Ma wiele korzyści zarówno dla deweloperów, jak i klientów, w tym:

  • Umożliwia logowanie jednokrotne: umożliwia aplikacjom uproszczenie sposobu uwierzytelniania użytkowników przy użyciu Microsoft Entra ID i chroni Microsoft Entra ID tokeny odświeżania przed eksfiltracją i nieprawidłowym użyciem
  • Zwiększone zabezpieczenia. Wiele ulepszeń zabezpieczeń jest dostarczanych z brokerem bez konieczności aktualizowania logiki aplikacji.
  • Obsługiwane funkcje Dzięki brokerowi deweloperzy mogą uzyskać dostęp do bogatych możliwości systemu operacyjnego i usług.
  • Integracja systemu. Aplikacje korzystające z funkcji plug and play brokera z wbudowanym selektorem kont, umożliwiające użytkownikowi szybkie wybranie istniejącego konta zamiast wielokrotnego wpisywania tych samych poświadczeń.
  • Ochrona tokenów. Logowanie jednokrotne firmy Microsoft w systemie Linux zapewnia, że tokeny odświeżające są powiązane z urządzeniem.

Jak wyrazić zgodę na korzystanie z brokera?

  1. W bibliotece MSAL dla języka Python wprowadziliśmy flagę enable_broker_on_linux, która włącza obsługę brokera zarówno w środowisku WSL, jak i w samodzielnym systemie Linux.
    • Jeśli Twoim celem jest włączenie obsługi brokera wyłącznie w środowisku WSL w Azure CLI, możesz rozważyć zmodyfikowanie kodu aplikacji Azure CLI w celu aktywowania flagi enable_broker_on_wsl wyłącznie w środowisku WSL.
    • Jeśli piszesz aplikację dla wielu platform, musisz również użyć elementu enable_broker_on_windows, zgodnie z opisem w artykule Using MSAL Python with Web Account Manager (Używanie Python biblioteki MSAL z menedżerem kont sieci Web).
    • Można ustawić dowolną kombinację następujących parametrów zgody na wartość true:
Flaga zgody Jeśli aplikacja zostanie uruchomiona Aplikacja zarejestrowała to jako identyfikator URI przekierowania dla platformy klasycznej w portalu Azure
włącz_brokera_w_systemie_windows Windows 10+ ms-appx-web://Microsoft. AAD. BrokerPlugin/your_client_id
enable_broker_on_wsl WSL ms-appx-web://Microsoft. AAD. BrokerPlugin/your_client_id
Włącz brokera na komputerze Mac Komputer Mac z zainstalowanym Portal firmy msauth.com.msauth.unsignedapp://auth
enable_broker_on_linux System Linux z zainstalowaną usługą Intune https://login.microsoftonline.com/common/oauth2/nativeclient (MUSI być włączona)
  1. Aplikacja musi obsługiwać identyfikatory URI przekierowania właściwe dla brokera. W przypadku Linux adres URL identyfikatora URI przekierowania musi mieć postać:

    https://login.microsoftonline.com/common/oauth2/nativeclient
    
  2. Aby korzystać z brokera, należy zainstalować pakiety powiązane z brokerem oprócz podstawowej biblioteki MSAL z repozytorium PyPI:

    pip install "msal[broker]>=1.33.0b1,<2"
    
  3. Po skonfigurowaniu można wywołać acquire_token_interactive, aby uzyskać token.

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

Parametry obsługi brokera

Następujące parametry są dostępne do konfigurowania obsługi brokera w bibliotece MSAL Python. Te parametry można przekazać do konstruktora PublicClientApplication lub do acquire_token_interactive metody .

Parametry: Typ Description
włącz_brokera_w_systemie_windows boolean To ustawienie jest skuteczne tylko wtedy, gdy aplikacja jest uruchomiona w Windows 10+. Ten parametr ma domyślną wartość None, co oznacza, że biblioteka MSAL nie będzie korzystać z brokera.

New in MSAL Python 1.25.0.
enable_broker_on_wsl boolean To ustawienie jest skuteczne tylko wtedy, gdy aplikacja jest uruchomiona w programie WSL. Ten parametr ma domyślną wartość None, co oznacza, że biblioteka MSAL nie będzie korzystać z brokera.

New in MSAL Python 1.25.0.
Włącz brokera na komputerze Mac boolean To ustawienie jest skuteczne tylko wtedy, gdy aplikacja jest uruchomiona na komputerze Mac z zainstalowanym Portal firmy. Ten parametr ma domyślną wartość None, co oznacza, że biblioteka MSAL nie będzie korzystać z brokera.

New in MSAL Python 1.31.0.
enable_broker_on_linux boolean To ustawienie jest skuteczne tylko wtedy, gdy aplikacja jest uruchomiona w systemie Linux z zainstalowaną usługą Intune. Ten parametr ma domyślną wartość None, co oznacza, że biblioteka MSAL nie będzie korzystać z brokera.

New in MSAL Python 1.33.0.
parent_window_handle int OPCJONALNIE

Uwagi dotyczące parent_window_handle

Parametr parent_window_handle jest wymagany, mimo że w systemie Linux nie jest używany. W przypadku aplikacji z graficznym interfejsem użytkownika lokalizacja monitu logowania zostanie określona ad hoc i obecnie nie może być powiązana z określonym oknem. W przyszłej aktualizacji ten parametr zostanie użyty do określenia rzeczywistego okna nadrzędnego .

Warunek Description
Aplikacja nie chce korzystać z brokera nie trzeba określać parent_window_handle
Aplikacja decyduje się na korzystanie z brokera parent_window_handle jest wymagany
Aplikacja to aplikacja graficznego interfejsu użytkownika uruchomiona w systemie Windows lub Mac należy podać uchwyt swojego okna, aby okno logowania pojawiło się na wierzchu Twojego okna
Aplikacja to aplikacja konsolowa uruchomiona w systemie Windows lub Mac może użyć symbolu zastępczego PublicClientApplication.CONSOLE_WINDOW_HANDLE
Aplikacja ma być aplikacją dla wielu platform Aplikacja musi używać elementu enable_broker_on_windows, zgodnie z opisem w artykule Using MSAL Python with Web Account Manager (Korzystanie z biblioteki MSAL Python z menedżerem kont sieci Web).

Zachowania awaryjne obsługi brokera w bibliotece MSAL Python

MSAL albo zgłosi błąd, albo po cichu przejdzie do przepływów bez użycia brokera.

  1. MSAL zignoruje enable_broker_… i pomiń brokera w tych przepływach uwierzytelniania, o których wiadomo, że nie są obsługiwane przez brokera. Obejmuje to usługi ADFS, B2C itp. Inne scenariusze "could-use-broker" można znaleźć poniżej.

  2. MSAL zgłasza błąd, gdy deweloper aplikacji zdecydował się na użycie brokera, ale nie zainstalowano bezpośredniego pakietu zależności „mid-tier”. Komunikat o błędzie prowadzi dewelopera aplikacji do deklarowania poprawnej zależności msal[broker]. Tutaj zgłaszamy błąd, ponieważ deweloperzy aplikacji mogą podjąć na jego podstawie działania.

  3. MSAL po cichu „dezaktywuje” brokera i przechodzi do trybu bez brokera, gdy ta opcja jest włączona, zależność jest zainstalowana, ale jej inicjalizacja nie powiedzie się. Przewidujemy, że stanie się to na urządzeniu, którego system operacyjny jest zbyt stary lub podstawowy składnik brokera jest w jakiś sposób niedostępny. Ani deweloper aplikacji, ani użytkownik końcowy nie mogą tu wiele zrobić. Ostatecznie zasady dostępu warunkowego wymuszają, aby użytkownik przełączyć się na inne urządzenie.

  4. MSAL zwraca błąd, gdy broker został włączony, zainstalowany i zainicjowany, ale kolejne żądania tokenu nie powiodły się.

Ważna

Jeśli pakiety związane z brokerem nie są zainstalowane i spróbujesz użyć brokera uwierzytelniania, zostanie wyświetlony błąd: ImportError: You need to install dependency by: pip install "msal[broker]>=1.xx,<2".

Note

Parametr parent_window_handle jest wymagany, mimo że w systemie Linux nie jest używany. W przypadku aplikacji z graficznym interfejsem użytkownika lokalizacja monitu logowania zostanie określona ad hoc i obecnie nie może być powiązana z określonym oknem. W przyszłej aktualizacji ten parametr zostanie użyty do określenia rzeczywistego okna nadrzędnego .

Buforowanie tokenów

Broker uwierzytelniania obsługuje buforowanie tokenów odświeżania i dostępu. Nie trzeba konfigurować niestandardowego buforowania.

Tworzenie przykładowej aplikacji

Przykładową aplikację, która pokazuje, jak używać biblioteki MSAL Python z brokerem uwierzytelniania w systemie Linux, można znaleźć w repozytorium GitHub projektu MSAL Python. Przykładowa aplikacja znajduje się w samples/console_app katalogu i zawiera przykłady użycia brokera do uwierzytelniania.

Rejestracja aplikacji

Zaktualizuj rejestrację aplikacji w portalu Azure, aby uwzględnić identyfikator URI przekierowania specyficzny dla brokera dla systemu Linux:

https://login.microsoftonline.com/common/oauth2/nativeclient

Zależności systemu Linux

Najpierw sprawdź, czy środowisko python3 jest zainstalowane w dystrybucji systemu Linux.

python3 --version

Jeśli nie, zainstaluj go przy użyciu menedżera pakietów dla dystrybucji.

Aby zainstalować w dystrybucji Linuksa opartej na Debianie/Ubuntu:

sudo add-apt-repository -y universe
sudo apt update
sudo apt install python3 python3-pip libwebkit2gtk-4.1-dev -y

Zależności Pythona

Aby korzystać z brokera, należy zainstalować pakiety powiązane z brokerem oprócz podstawowej biblioteki MSAL z repozytorium PyPI:

pip install "msal[broker]>=1.33.0b1,<2"

Stwórz projekt

Po skonfigurowaniu można wywołać acquire_token_interactive, aby uzyskać 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"]))