Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
MSAL kann Microsoft Single Sign-On für Linux aufrufen, eine Linux-Komponente, die unabhängig von der Linux-Distribution bereitgestellt wird, jedoch mithilfe eines Paket-Managers über sudo apt install microsoft-identity-broker oder sudo dnf install microsoft-identity-broker installiert wird.
Diese Komponente fungiert als Authentifizierungsbroker, sodass die Benutzer Ihrer App von der Integration mit Konten profitieren können, die Linux bekannt sind – z. B. von dem Konto, mit dem Sie sich bei Ihren Linux-Sitzungen angemeldet haben, für Apps, die Daten vom Broker beziehen. Es wird auch als Abhängigkeit von Anwendungen gebündelt, die von Microsoft entwickelt wurden, z. B. Unternehmensportal. Diese Anwendungen werden installiert, wenn ein Linux-Computer in der Geräteflotte eines Unternehmens über eine Endpunktverwaltungslösung wie Microsoft Intune registriert wird.
Mithilfe eines Authentifizierungsbrokers unter Linux können Sie vereinfachen, wie Sich Ihre Benutzer mit Microsoft Entra ID von Ihrer Anwendung authentifizieren und zukünftige Funktionen nutzen, die Microsoft Entra ID Aktualisierungstoken vor Exfiltration und Missbrauch schützen.
Um SSO in Ihrer WSL-App mit MSAL für Python zu aktivieren, müssen Sie sicherstellen, dass der Schlüsselbund eingerichtet und entsperrt ist, da MSAL libsecret verwendet, um mit dem Keyring-Daemon zu kommunizieren.
Beispiel für den WSL-Authentifizierungsfluss
In einer Situation, in der Sie über eine WSL-App verfügen, die sich mit Microsoft Entra ID authentifizieren muss, würde der Authentifizierungsfluss für eine interaktive Anforderung wie folgt aussehen:
Aktualisieren auf die neueste Version von WSL
Stellen Sie sicher, dass Sie auf die neueste WSL-Version aktualisiert haben. Das Dialogfeld "WAM-Kontosteuerung" wird in WSL-Versionen 2.4.13 und höher unterstützt.
# To check what distros are available:
wsl.exe --list --online
wsl.exe --install Ubuntu-22.04
# To check the WSL version:
wsl --version
# To update WSL:
wsl --update
Linux-Paketabhängigkeiten
Installieren Sie die folgenden Abhängigkeiten auf Ihrer Linux-Plattform:
-
libsecret-toolsist erforderlich, um eine Schnittstelle mit dem Linux-Schlüsselbund zu erstellen.
Zur Installation auf Debian-/Ubuntu-basierten Linux-Distributionen:
sudo add-apt-repository -y universe
sudo apt update
sudo apt install libwebkit2gtk-4.1-dev libsecret-1-0 -y
#from Powershell, run
wsl.exe --shutdown
Important
Damit der Schlüsselbund wie vorgesehen funktioniert, sollten Sie sicherstellen, dass Sie Folgendes tun: 1. 2. Installieren Sie die Abhängigkeiten. WSL neu starten, 3. Konfigurieren Sie den Schlüsselbund. Wenn die Schritte nicht in der richtigen Reihenfolge ausgeführt werden, fehlt im Schlüsselbund die Option „Kennwortschlüsselbund“.
Keyring in WSL einrichten
MSAL verwendet libsecret unter Linux. Es ist erforderlich, mit dem keyring Daemon zu kommunizieren. Benutzer können Seahorse (eine GNOME-Anwendung zum Verwalten von Verschlüsselungsschlüsseln und Kennwörtern) verwenden, um den Inhalt von keyring über eine grafische Benutzeroberfläche (GUI) zu verwalten.
Auf Debian-basierten Distributionen können Sie das Paket installieren, indem Sie das Paket ausführen sudo apt install seahorse und dann den folgenden Anweisungen folgen:
Führen Sie
seahorseim Terminal als regulärer Benutzer aus (nicht mit sudo).
Wählen Sie in der oberen linken Ecke + aus und erstellen Sie den Passwort-Schlüsselbund.
Erstellen eines Schlüsselrings mit dem Namen "Login"
Legen Sie das Kennwort im nächsten Dialogfeld fest.
Führen Sie
wsl.exe --shutdownin Ihrem Windows-Terminal aus.Starten Sie eine neue WSL-Sitzung, und führen Sie das Beispiel aus. Sie sollten nach dem Schlüsselringkennwort gefragt werden.
Ausführen einer Beispiel-App
Um einen Broker auf der Linux-Plattform zu verwenden, stellen Sie sicher, dass Sie die BrokerOptionsOperatingSystems.Linux Einstellung wie im folgenden Codeausschnitt gezeigt festlegen:
Verweisen Sie auf das Aktivieren von SSO in systemeigenen Linux-Apps mit MSAL-Python, um Informationen zur Konfiguration des Projekts zu erfahren.
Python Abhängigkeiten
Um den Broker zu verwenden, müssen Sie die brokerbezogenen Pakete zusätzlich zum Kern-MSAL von PyPI installieren:
pip install "msal[broker]>=1.33.0b1,<2"
Ausführen der Beispiel-App
Nach der Konfiguration können Sie aufrufen acquire_token_interactive , um ein Token zu erwerben. Speichern Sie Folgendes unter wsl_broker.py:
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"]
# 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"]))
Beispiel ausführen
Führen Sie die Beispiel-App mit dem folgenden Befehl aus:
python wsl_broker.py
Es sollte eine Eingabeaufforderung angezeigt werden:
- Geben Sie Ihren Benutzernamen/Ihre Anmeldeinformationen ein.
- Geben Sie Ihr Schlüsselbund-Passwort ein.
- anschließend erhält die App ein Token und druckt es in die Konsole.