Identity a ověřování Microsoftu (MSAL) pro Python

Knihovna Identity a ověřování Microsoftu (MSAL) pro Python umožňuje přihlašovat uživatele nebo aplikace pomocí identit Microsoftu (Microsoft Entra ID, účty Microsoft a účty Microsoft Entra ID). Pomocí Python MSAL můžete získat tokeny z Microsoft Entra ID pro volání chráněných webových rozhraní API, jako jsou Microsoft Graph, další rozhraní API Microsoft nebo vlastní rozhraní API.

Předpoklady

Nainstalujte balíček

Nainstalujte balíček MSAL pro Python. MSAL Python najdete na PyPI.

pip install msal

Koncepty identit

Python MSAL je součástí ekosystému Microsoft identity platform. Seznamte se s následujícími koncepty, abyste mohli efektivně používat MSAL Python k ochraně vašich aplikací a rozhraní API:

Scénáře použití

Pokud chcete používat Python MSAL, zaregistrujte aplikaci v Microsoft identity platform. Budete potřebovat účet Azure s aktivním předplatným. Pokud ho nemáte, vytvořte si bezplatný účet . Aplikaci můžete zaregistrovat v tenantu zákazníka nebo tenantu zaměstnanců.

Aplikace můžou používat msAL Python k získání tokenů pro přístup k chráněným rozhraním API. Různé typy aplikací získávají tokeny pomocí různých toků ověřování. Mezi podporované typy aplikací patří desktopové aplikace, webové aplikace, webová rozhraní API a aplikace spuštěné na zařízeních, která nemají prohlížeč (například zařízení IoT).

V msAL Python jsou aplikace zařazeny do kategorií následujícím způsobem:

  • Veřejné klientské aplikace (desktopové a mobilní). Tyto typy aplikací nemůžou bezpečně ukládat tajné kódy aplikací.
  • Důvěrné klientské aplikace (webové aplikace, webová rozhraní API a aplikace démona). Tento typ aplikací bezpečně ukládá tajný kód zaregistrovaný v Microsoft Entra ID.

Další informace najdete v dokumentaci k veřejným klientům a důvěrným klientským aplikacím a různým typům aplikací a jejich tokům ověřování v Microsoft identity platform.

Po určení, jestli je aplikace veřejná nebo důvěrná klientská aplikace, můžete k získání tokenů pro různé scénáře použít Python MSAL.

Základní použití

Získání tokenů pomocí MSAL Python se řídí třístupňovým vzorem. Pro různé toky budou existovat určité varianty. Pokud byste je chtěli vidět v akci, stáhněte si naše ukázky.

  1. Knihovna MSAL vychází ze striktního oddělení mezi veřejnými klientskými aplikacemi a důvěrnými klientskými aplikacemi. Proto vytvořte instanci PublicClientApplication nebo ConfidentialClientApplication ji znovu použijte během životního cyklu aplikace. Například pro veřejnou klientskou aplikaci může inicializační kód vypadat takto:

    from msal import PublicClientApplication
    
    app = PublicClientApplication(
        "your_client_id",
        authority="https://login.microsoftonline.com/common")
    

    Hodnota autority se liší v závislosti na typu účtů, které přihlašujete, a typu tenanta, ve které je vaše aplikace zaregistrovaná. Pokud byste například chtěli používat https://login.microsoftonline.com/common pro přihlášení k pracovním i osobním účtům Microsoft zřízeným v tenantech zaměstnanců (Microsoft Entra ID). U zákaznických účtů zřízených v tenantech zákazníka bude mít vaše autorita formu jako https://<subdomain>.ciamlogin.com. Další informace najdete v dokumentaci vystavitele tokenů.

  2. Nejprve zkuste tokeny získat z mezipaměti. Model rozhraní API v MSAL poskytuje explicitní kontrolu nad tím, jak využívat mezipaměť tokenů. I když je část ukládání do mezipaměti technicky volitelná, důrazně doporučujeme ji použít ve vaší aplikaci. Pomocí mezipaměti můžete zajistit, že neprovádíte žádná další volání rozhraní API a automaticky zpracujete aktualizaci tokenu.

    # initialize result variable to hole the token response
    result = None 
    
    # We now check the cache to see
    # whether we already have some accounts that the end user already used to sign in before.
    accounts = app.get_accounts()
    if accounts:
        # If so, you could then somehow display these accounts and let end user choose
        print("Pick the account you want to use to proceed:")
        for a in accounts:
            print(a["username"])
        # Assuming the end user chose this one
        chosen = accounts[0]
        # Now let's try to find a token in cache for this account
        result = app.acquire_token_silent(["User.Read"], account=chosen)
    
  3. Pokud v mezipaměti není žádný vhodný token nebo jste se rozhodli přeskočit předchozí krok, odešlete do Microsoft Entra ID žádost o získání tokenu. Existují různé metody založené na typu a scénáři klienta, ale pro účely příkladu ukazujeme, jak používat acquire_token_interactive, což uživatele vyzve k zadání přihlašovacích údajů.

    if not result:
        # So no suitable token exists in cache. Let's get a new one from Azure AD.
        result = app.acquire_token_interactive(scopes=["User.Read"])
    if "access_token" in result:
        print(result["access_token"])  # Yay!
    else:
        print(result.get("error"))
        print(result.get("error_description"))
        print(result.get("correlation_id"))  # You may need this when reporting a bug
    
  4. Uložte kód do Python souboru místně, například do msaltest.py.

  5. Spusťte kód spuštěním python .\msalpytest.pypříkazu . Následující vizuál ukazuje přihlašovací prostředí pro tento příklad.

    Příklad aplikace s výzvou, aby se uživatel přihlásil pomocí svého účtu

  6. Po dokončení ověřování a zavření prohlížeče byste měli být schopni zobrazit přístupový token vytištěný v terminálu.

Osvědčené postupy pro robustní podnikovou aplikaci

Token chráněného webového rozhraní API můžete získat pomocí knihovny MSAL Python. Nemusíte také zpracovávat obnovovací tokeny sami. Pokud ale chcete vytvářet robustní podnikové aplikace, budete muset udělat o něco víc. Například budete chtít:

  • Zpracujte výjimky, a to jak při získání tokenu, tak i při volání chráněného webového rozhraní API. Konkrétně pokud vaše aplikace běží v tenantovi Microsoft Entra, ve kterém správci tenanta nastavili zásady podmíněného přístupu k vynucení vícefaktorového ověřování (MFA), budete muset zpracovat výzvu deklarace identity.

  • Možná budete chtít povolit protokolování, abyste mohli řešit problémy s aplikací a pomáhat svým uživatelům, a zároveň respektovat jejich soukromí a být v souladu s GDPR.

Ukázky

K zahájení práce s msAL Python můžete použít několik ukázek.

References

  • Úložiště knihovny MSAL Python na GitHub
  • Verze MSAL Pythonu na GitHubu.

Viz také