Použití MSAL Python s Web Account Managerem

Pokud vytváříte Windows aplikaci, můžete zvážit zjednodušení ověřování uživatelů pomocí zprostředkovatele ověřování. Správce webových účtů (WAM) je zprostředkovatel ověřování, který spolupracuje s MSAL Python. WAM je k dispozici pouze na Windows 10 a novějších i Windows Server 2019 a vyšších.

Další informace o výhodách použití zprostředkovatele ověřování najdete v tématu Co je zprostředkovatel v dokumentaci k MSAL.NET.

Využití

Pokud chcete použít zprostředkovatele, budete muset nainstalovat balíčky související s zprostředkovateli kromě základní knihovny MSAL z PyPI:

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

Pokud nejsou nainstalovány balíčky související se zprostředkovatelem a pokusíte se použít ověřovacího zprostředkovatele, zobrazí se chyba ImportError: Musíte nainstalovat závislost pomocí: pip install "msal[broker]>=1.20,<2".

Poté vytvořte novou instanci PublicClientApplication a nastavte enable_broker_on_windows na True. Tím zajistíte, že MSAL bude zkoušet a komunikovat s WAM místo zobrazení nového okna prohlížeče. Pokud píšete multiplatformní aplikaci, budete také muset použít enable_broker_on_mac, jak je popsáno v článku Použití MSAL Python s zprostředkovatelem ověřování v systému macOS.

from msal import PublicClientApplication

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

Token teď můžete získat voláním acquire_token_interactive a zadáním popisovače nadřazeného okna prostřednictvím parent_window_handle:

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

WAM vyžaduje popisovač nadřazeného okna, aby bylo zajištěno, že se dialogové okno správně zobrazí nad oknem, ze kterého byl požadavek vyvolán. MSAL to neurčuje automaticky, protože existuje mnoho faktorů, které mohou ovlivnit, ke kterému oknu se má WAM připojit, a právě vývojáři aplikací mohou nejlépe rozhodnout, které okno to má být.

V případě konzolových aplikací usnadňuje MSAL tím, že nabízí předefinované řešení pro získání úchytu okna pro terminál - CONSOLE_WINDOW_HANDLE. U desktopových aplikací může být k získání popisovače okna potřeba více práce s rozhraním API Windows. Pomocné balíčky, jako pywin32, mohou pomoci s voláním rozhraní API.

Před spuštěním aplikace se ujistěte, že jste nakonfigurovali adresu URL pro přesměrování desktopové aplikace:

Pokud chcete použít zprostředkovatele Windows, musí mít vaše aplikace správnou adresu URL přesměrování nakonfigurovanou v Azure Portal ve tvaru:

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

Pokud není adresa URL pro přesměrování nakonfigurovaná, zobrazí se chyba broker_error podobná (pii). Stav: Response_Status.Status_ApiContractViolation, kód chyby: 3399614473, Tag: 557973642.

Pokud byla konfigurace a vytvoření instance správné, po spuštění aplikace by se mělo zobrazit spuštění zprostředkovatele ověřování a povolit uživateli vybrat účet, se kterým se chce ověřit.

Příklad volání WAM z jazyka Python

Stojí za zmínku, že pokud přepnete na ověřování prostřednictvím brokera a uživatel byl dříve přihlášený a stav přihlášení je stále platný, volání acquire_token_interactive stále povede k tichému pokusu o získání tokenu a uživatel bude vyzván jen v případě potřeby. Pokud chcete vždy zobrazit výzvu, můžete použít tento volitelný parametr prompt="select_account".

Rozdíly mezi prostředím zprostředkovatele

V závislosti na autoritě zadané při vytváření PublicClientApplicationinstance se uživatelské rozhraní zprostředkovatele může lišit.

/Spotřebitelé

Používá se k ověřování pouze u osobních Microsoft účtů.

Uživatelské rozhraní WAM pro uživatele

/Společné

Používá se k ověřování pomocí osobních Microsoft účtů i pracovních a školních účtů.

Uživatelské rozhraní WAM pro osobní a pracovní účty

/Organizace

Používá se k ověřování pouze u pracovních a školních účtů.

Pouze uživatelské rozhraní WAM pro pracovní účty

Pokud login_hint zadáte, ale účet ještě není zaregistrovaný v WAM, nápověda se automaticky vyplní do pole E-mail nebo telefon .

/TENANT_ID

Používá se pouze k ověření pracovních a školních účtů v zadaném tenantu.

Uživatelské rozhraní WAM pro účty specifické pro tenanta

Pokud login_hint zadáte, ale účet ještě není zaregistrovaný v WAM, nápověda se automaticky vyplní do pole E-mail nebo telefon .