Verwenden von MSAL-Python mit Web Account Manager

Wenn Sie eine Windows Anwendung erstellen, sollten Sie die Authentifizierung von Benutzern mithilfe eines Authentifizierungsbrokers vereinfachen. Web Account Manager (WAM) ist ein Authentifizierungsbroker, der mit MSAL-Python funktioniert. WAM ist nur auf Windows 10 und höher sowie Windows Server 2019 und höher verfügbar.

Weitere Informationen zu den Vorteilen der Verwendung eines Authentifizierungsbrokers finden Sie in der dokumentation zu MSAL.NET.

Usage

Um den Broker zu verwenden, müssen Sie die brokerbezogenen Pakete zusätzlich zum Kern-MSAL von PyPI installieren:

pip install msal[broker]>=1.20,<2

Wenn brokerbezogene Pakete nicht installiert sind und Sie versuchen, den Authentifizierungsbroker zu verwenden, erhalten Sie den Fehler ImportError: Sie müssen Abhängigkeit installieren, indem Sie "msal[broker]>=1.20,2<" installieren.

Instanziieren Sie als Nächstes ein neues PublicClientApplication und setzen Sie enable_broker_on_windows auf True. Dadurch wird sichergestellt, dass MSAL versucht, mit WAM zu kommunizieren, anstatt ein neues Browserfenster zu öffnen. Wenn Sie eine plattformübergreifende Anwendung entwickeln, müssen Sie auch enable_broker_on_mac verwenden, wie im Artikel Verwenden von MSAL Python mit einem Authentifizierungsbroker unter macOS beschrieben.

from msal import PublicClientApplication

app = PublicClientApplication(
    "CLIENT_ID",
    authority="https://login.microsoftonline.com/common",
    enable_broker_on_windows=True)

Sie können jetzt ein Token abrufen, indem Sie acquire_token_interactive aufrufen und über parent_window_handle ein Handle des übergeordneten Fensters angeben:

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

WAM benötigt das Handle eines übergeordneten Fensters, um sicherzustellen, dass das Dialogfeld korrekt über dem aufrufenden Fenster angezeigt wird. MSAL leitet dies nicht direkt ab, da es viele Variablen gibt, die beeinflussen können, an welches Fenster WAM gebunden werden muss, und Entwickler, die Anwendungen erstellen, am besten geeignet sind, um zu entscheiden, welches Fenster es sein soll.

Für Konsolenanwendungen macht MSAL es einfach, indem es eine sofort einsatzbereite Lösung zum Abrufen des Fensterhandles für das Terminal bereitstellt – CONSOLE_WINDOW_HANDLE. Für Desktopanwendungen ist möglicherweise mehr Arbeit mit der Windows-API erforderlich, um das Fensterhandle abzurufen. Hilfspakete wie pywin32 können bei API-Aufrufen hilfreich sein.

Stellen Sie vor dem Ausführen der Anwendung sicher, dass Sie die Umleitungs-URL für die Desktop-App konfigurieren:

Um den Windows-Broker zu verwenden, muss für Ihre Anwendung im Azure-Portal die richtige Umleitungs-URL im folgenden Format konfiguriert sein:

ms-appx-web://microsoft.aad.brokerplugin/YOUR_CLIENT_ID

Wenn die Umleitungs-URL nicht konfiguriert ist, erhalten Sie eine broker_error ähnlich (pii). Status: Response_Status.Status_ApiContractViolation, Fehlercode: 3399614473, Tag: 557973642.

Wenn die Konfiguration und Instanziierung korrekt war, sollte der Authentifizierungsbroker gestartet werden, sobald Sie die Anwendung ausgeführt haben, und dem Benutzer erlauben, das Konto auszuwählen, mit dem er sich authentifizieren möchte.

Beispiel für den Aufruf von WAM aus Python

Beachten Sie, dass beim Wechsel zur brokerbasierten Authentifizierung der Aufruf von acquire_token_interactive weiterhin zu einem stillen Versuch führt, ein Token abzurufen, wenn der Benutzer zuvor angemeldet war und der Anmeldestatus noch gültig ist, und nur bei Bedarf eine Aufforderung angezeigt wird. Wenn Sie lieber immer dazu auffordern, können Sie diesen optionalen Parameter prompt="select_account"verwenden.

Unterschiede bei der Brokererfahrung

Je nachdem, welche Autorität beim Instanziieren PublicClientApplicationangegeben wurde, kann die Broker-Benutzeroberfläche unterschiedlich sein.

/Verbraucher

Wird nur für die Authentifizierung mit persönlichen Microsoft Konten verwendet.

WAM-UI für Verbraucher

/gemeinsam

Wird für die Authentifizierung mit persönlichen Microsoft Konten sowie Geschäfts- und Schulkonten verwendet.

WAM-Benutzeroberfläche für persönliche und geschäftliche Konten

/Organisationen

Wird nur zum Anmelden mit Geschäfts- und Schulkonten verwendet.

WAM-Benutzeroberfläche nur für Geschäftskonten

Wenn login_hint bereitgestellt wird, aber das Konto noch nicht in WAM registriert ist, wird der Hinweis automatisch im Feld "E-Mail" oder "Telefon " ausgefüllt.

/TENANT_ID

Wird nur für die Authentifizierung mit Geschäfts- und Schulkonten innerhalb des angegebenen Mandanten verwendet.

WAM-Benutzeroberfläche für mandantenspezifische Konten

Wenn login_hint bereitgestellt wird, aber das Konto noch nicht in WAM registriert ist, wird der Hinweis automatisch im Feld "E-Mail" oder "Telefon " ausgefüllt.