Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
MsAL Python můžete použít k přihlášení uživatelů se sociálními identitami, získání tokenů a přizpůsobení přihlašovacího prostředí pomocí Azure AD B2C.
Important
Od 1. května 2025 už nebude Azure AD B2C k dispozici k nákupu pro nové zákazníky. Další informace najdete v I Azure AD B2C stále k dispozici k nákupu? v našich nejčastějších dotazech.
Azure AD B2C vychází z konceptu toků uživatelů (dříve označovaných jako zásady). V knihovně MSAL Python zadání uživatelského toku znamená zadání autority.
- Při vytváření klientské aplikace je potřeba nastavit uživatelský tok v parametru authority na
https://{tenant_name}.b2clogin.com/{tenant_name}.onmicrosoft.com/{user_flow}. A pak by každý běžnýacquire_token_by_xyz(...)fungoval v rámci tohoto uživatelského toku. Mezi scénáři B2C a jiným než B2C neexistuje žádný rozdíl mezi rozhraním API. Stačí prohodit jinou sadu konfigurace a stejná ukázka webové aplikace by fungovala pro scénáře mimo B2C i B2C. - Některé uživatelské postupy, například uživatelský postup Upravit profil nebo uživatelský postup Obnovit heslo, jsou v podstatě přizpůsobené uživatelské prostředí. Adresu URL těchto stránek můžete získat tak, že vytvoříte
PublicClientApplications autoritou obsahující dané{user_flow}, a potom zavoláte metoduget_authorization_request_url(...). (V naší ukázce webové aplikace pro ně dokonce poskytujeme i pomocnou funkci vyšší úrovně.)
Další podrobnosti o těchto souhrnech jsou popsány níže.
Autorita pro tenanta B2C a uživatelský tok
Autorita, která se má použít, je https://{tenant_name}.b2clogin.com/{tenant_name}.onmicrosoft.com/{user_flow} tam, kde:
-
tenant_nameje název tenanta Azure AD B2C, například „contoso“ -
user_flowje název toku uživatele, který se má použít (například můžete mít "b2c_1_susi" pro přihlášení nebo registraci).
Při vytváření aplikace je jako obvykle potřeba zadat autoritu vytvořenou výše uvedeným způsobem.
app = msal.PublicClientApplication( # Or ConfidentialClientApplication(...)
"your_client_id",
authority="https://contoso.b2clogin.com/contoso.onmicrosoft.com/b2c_1_susi",
...)
Note
Můžete také použít vlastní přizpůsobený název domény, aby vaše autorita vypadala jako "https:// contoso.com/{tenant_name}.onmicrosoft.com/{user_flow}". V zákulisí bude MSAL Python automaticky upravovat chování kontroly validate_authority pro všechny domény B2C. Takže nemusíte dělat nic navíc.
Získání tokenu
Získání tokenu pro rozhraní API chráněné službou Azure AD B2C na základě uživatelského toku, který je již zadaný jako součást autority, je úplně stejné jako ve scénáři bez B2C.
Proto naše ukázka webové aplikace v Pythonu, která není B2C, slouží také jako ukázka webové aplikace B2C. Jeho hlavní soubor app.py funguje ve scénářích mimo B2C i B2C bez jakýchkoli změn.
app.acquire_token_by_xyz(...) # Same as in non-B2C scenarios
Účty nemusíte filtrovat podle toku uživatele, pokud sledujete vzor "vytvoření jiné aplikace MSAL pro jiný tok uživatele" (protože tok uživatele B2C je navržený tak, aby se choval jako izolovaná autorita). V praxi budete stále opakovaně používat stejnou aplikaci MSAL a její mezipaměť tokenů pro tok uživatele SignIn a vytvořit pouze novou jednorázovou aplikaci MSAL při vyvolání toků uživatele EditProfile nebo ResetPassword, jejichž vrácený token (pokud nějaký) by stejně nebyl užitečný.
Příklad toků uživatelů EditProfile a ResetPassword
Toky uživatelů EditProfile a ResetPassword jsou:
- méně o získávání tokenů. To nemusí být zřejmé, ale je to proto, že tokeny vydané jedním tokem uživatele B2C nejsou nutně kompatibilní s tokeny vydanými jiným tokem uživatele B2C. Bezpečnější vzor je ale uspořádat webovou aplikaci tak, aby tyto tokeny nesdílel.
- další informace o přizpůsobeném uživatelském prostředí. Představte si tradiční webovou aplikaci (i mimo kontext MSAL nebo B2C) – jak byste vytvořili přizpůsobené prostředí pro úpravu profilu? Do navigačního panelu webové aplikace byste zahrnuli odkaz odkazující na tuto přizpůsobenou stránku.
Ukázka naší webové aplikace B2C je přesně uspořádaná tak, aby se skryla všechna podkladová rozhodnutí. Stačí aktualizovat šablonu HTML tak, aby obsahovala nový odkaz, například stránku Upravit profil.
<a href='{{_build_auth_url(authority=config["B2C_PROFILE_AUTHORITY"])}}'>Edit Profile</a>
Přihlašovací údaje vlastníka prostředku pomocí hesla (ROPC) v B2C
Warning
Tok ověřování pomocí přihlašovacích údajů vlastníka prostředku (ROPC) byl pro veřejné klientské aplikace označen jako zastaralý z důvodu bezpečnostních rizik. Microsoft doporučuje používat bezpečnější tok ověřování. Postupujte podle oficiálních pokynů k migraci z ROPC.
Mezi scénářem B2C a jiným než B2C neexistuje žádný rozdíl mezi rozhraním API. Následující obsah slouží jako minikurs.
- Ve svém tenantovi Azure AD B2C vytvořte nový tok uživatelů a vyberte Přihlásit se pomocí ROPC. Tím se povolí tok uživatele ROPC pro vašeho tenanta. Další podrobnosti najdete v tématu Konfigurace toku přihlašovacích údajů vlastníka prostředku .
- Jakmile vytvoříte instanci MSAL s autoritou, která obsahuje uživatelský tok ROPC,
acquire_token_by_username_password(...)bude fungovat jako obvykle. - Omezení: To funguje jenom pro místní účty (kde se zaregistrujete v B2C pomocí e-mailu nebo uživatelského jména). Tento tok nefunguje při federaci s některým z poskytovatelů identity podporovaných službou B2C (Facebook, Google atd.).
Microsoft nedoporučuje používat udělení přihlašovacích údajů vlastníka prostředku. Ve většině scénářů jsou k dispozici a doporučeny bezpečnější alternativy. Tento tok vyžaduje velmi vysoký stupeň důvěryhodnosti v aplikaci a nese rizika, která nejsou přítomna v jiných tocích. Tento tok byste měli použít jenom v případě, že jiné bezpečnější toky nejsou přijatelné. Další informace najdete v pokynech k uživatelskému jménu a heslu .
Ukládání do mezipaměti s B2C v MSAL Python
Známý problém
Vzorec používání mezipaměti tokenů v MSAL Python začíná dotazováním všech existujících účtů pomocí get_accounts(...), která podporuje parametr username jako filtr.
Data uživatelského jména se načítají z atributu preferred_username v tokenu ID.
Ve výchozím nastavení tato deklarace identity chybí v mnoha scénářích Azure AD B2C.
Dopad na zákazníka spočívá v tom, že při pokusu o zobrazení účtů bude pole uživatelského jména prázdné.
To vás nemusí obtěžovat, pokud ve webové aplikaci používáte tok ověřovacího kódu a pracujete pouze s jedním účtem na uživatele.
Pokud ale používáte tok ROPC a cítíte se, že už znáte uživatelské jméno koncového uživatele, accounts = app.get_accounts(username="john.doe@contoso.com") stále by vám poskytl prázdný výsledek, protože "john.doe@contoso.com" se neshoduje "".
Náhradním řešením je přizpůsobit váš uživatelský tok B2C tak, aby se vyplnila a vrátila deklarace identity preferred_username, nebo jednoduše zavolat app.get_accounts() bez konkrétního parametru uživatelského jména.
Ukázky
| Sample | Platform | Description |
|---|---|---|
| Microsoft Identity Python Web App | Všechny platformy podporující Python | Webová aplikace ukazuje, jak používat MSAL Python k ověřování uživatelů prostřednictvím Azure Active Directory B2C a jak přistupovat k webovému rozhraní API s výslednými tokeny. |