Povolení jednotného přihlašování v nativním Linuxu pomocí Python MSAL

Identity a ověřování Microsoftu (MSAL) je sada pro vývoj softwaru (SDK), která umožňuje aplikacím volat zprostředkovatele jednotného přihlášení pro Linux od Microsoftu, což je komponenta pro Linux dodávaná nezávisle na linuxové distribuci, instaluje se však pomocí správce balíčků za použití sudo apt install microsoft-identity-broker nebo sudo dnf install microsoft-identity-broker.

Tato komponenta funguje jako zprostředkovatel autentizace a umožňuje tak uživatelům vaší aplikace využívat integraci s účty, které Linux zná, například s účtem, pomocí kterého jste se přihlásili do svých relací Linuxu, pro aplikace, které tohoto zprostředkovatele používají.

Broker je také zahrnut jako závislost aplikací vyvinutých společností Microsoft (například Portál společnosti)). Příkladem situace, kdy se zprostředkovatel nainstaluje, je registrace počítače s Linuxem do firemní flotily zařízení prostřednictvím řešení pro správu koncových bodů, jako je Microsoft Intune.

Co je zprostředkovatel

Zprostředkovatel autentizace je aplikace spuštěná na počítači uživatele, která spravuje procesy autentizačního navázání spojení a správu tokenů pro připojené účty. Operační systém Linux používá jako zprostředkovatele ověřování Microsoft jednotné přihlašování pro Linux. Má mnoho výhod pro vývojáře a zákazníky, včetně:

  • Umožňuje jednotné přihlašování: Umožňuje aplikacím zjednodušit ověřování uživatelů pomocí Microsoft Entra ID a chránit Microsoft Entra ID obnovovací tokeny před exfiltrací a zneužitím.
  • Lepší zabezpečení. Mnoho vylepšení zabezpečení se dodává se zprostředkovatelem, aniž by bylo nutné aktualizovat logiku aplikace.
  • Podpora funkcí S pomocí zprostředkovatelů můžou vývojáři získat přístup k bohatým možnostem operačního systému a služeb.
  • Integrace systému. Aplikace, které používají modul plug-and-play zprostředkovatele s integrovaným výběrem účtu, umožňuje uživateli rychle vybrat existující účet místo opětovného zadávání stejných přihlašovacích údajů.
  • Ochrana tokenů. Microsoft jednotné přihlašování pro Linux zajišťuje, že jsou obnovovací tokeny vázané na zařízení.

Jak se přihlásit k používání zprostředkovatele?

  1. V knihovně MSAL Python jsme zavedli příznak enable_broker_on_linux, který povoluje brokera ve WSL i v samostatném Linuxu.
    • Pokud vaším cílem je povolit podporu zprostředkovatele výhradně ve WSL pro Azure CLI, můžete zvážit úpravu kódu aplikace Azure CLI tak, aby se příznak aktivoval enable_broker_on_wsl výhradně ve WSL.
    • Pokud píšete multiplatformní aplikaci, budete také muset použít enable_broker_on_windows, jak je uvedeno v článku Používání MSAL Python s web account managerem.
    • Můžete nastavit libovolnou kombinaci následujících parametrů výslovného souhlasu na hodnotu true:
Příznak výslovného souhlasu Pokud se aplikace spustí na Aplikace tuto hodnotu zaregistrovala jako identifikátor URI přesměrování pro desktopovou platformu na webu Azure Portal
enable_broker_on_windows Windows 10+ ms-appx-web://Microsoft. AAD. BrokerPlugin/your_client_id
enable_broker_on_wsl WSL ms-appx-web://Microsoft. AAD. BrokerPlugin/your_client_id
Povolit brokera na Macu Mac s nainstalovaným Portál společnosti msauth.com.msauth.unsignedapp://auth
enable_broker_on_linux Linux s nainstalovaným Intune https://login.microsoftonline.com/common/oauth2/nativeclient (Musí být povolená)
  1. Vaše aplikace potřebuje podporovat identifikátory URI přesměrování specifické pro zprostředkovatele. Konkrétně pro Linux musí být adresa URL identifikátoru URI pro přesměrování:

    https://login.microsoftonline.com/common/oauth2/nativeclient
    
  2. 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.33.0b1,<2"
    
  3. Po nakonfigurování můžete volat acquire_token_interactive , abyste získali token.

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

Parametry pro podporu zprostředkovatele

Pro konfiguraci podpory zprostředkovatele v Python MSAL jsou k dispozici následující parametry. Tyto parametry lze předat konstruktoru PublicClientApplication nebo acquire_token_interactive metodě.

Parametry: Typ Description
enable_broker_on_windows boolean Toto nastavení platí jenom v případě, že vaše aplikace běží na Windows 10+. Tento parametr má výchozí hodnotu None, což znamená, že msAL nevyužívá zprostředkovatele.

New in MSAL Python 1.25.0.
enable_broker_on_wsl boolean Toto nastavení platí jenom v případě, že vaše aplikace běží na WSL. Tento parametr má výchozí hodnotu None, což znamená, že msAL nevyužívá zprostředkovatele.

New in MSAL Python 1.25.0.
Povolit brokera na Macu boolean Toto nastavení platí jenom v případě, že vaše aplikace běží na Macu s nainstalovaným Portál společnosti. Tento parametr má výchozí hodnotu None, což znamená, že msAL nevyužívá zprostředkovatele.

New in MSAL Python 1.31.0.
enable_broker_on_linux boolean Toto nastavení platí jenom v případě, že vaše aplikace běží v Linuxu s nainstalovaným Intune. Tento parametr má výchozí hodnotu None, což znamená, že msAL nevyužívá zprostředkovatele.

New in MSAL Python 1.33.0.
parent_window_handle int VOLITELNÉ

Poznámky týkající se parent_window_handle

Parametr parent_window_handle se vyžaduje, i když v Linuxu se nepoužívá. U aplikací s grafickým uživatelským rozhraním se určí umístění výzvy k přihlášení ad hoc a v současné době nelze svázat s určitým oknem. V budoucí aktualizaci se tento parametr použije k určení skutečného nadřazeného okna.

Podmínka Description
Aplikace nechce využívat zprostředkovatele není nutné zadávat parent_window_handle
Aplikace se rozhodne používat zprostředkovatele. parent_window_handle je povinný
Aplikace je aplikace grafického uživatelského rozhraní spuštěná v systému Windows nebo Mac. je třeba zadat popisovač okna, aby se přihlašovací okno zobrazilo nad vaším oknem
Aplikace je konzolová aplikace spuštěná v systému Windows nebo Mac. může použít zástupný symbol. PublicClientApplication.CONSOLE_WINDOW_HANDLE
Aplikace je určená jako multiplatformní aplikace. Aplikace musí používat enable_broker_on_windows, jak je popsáno v článku Použití MSAL Python s Web Account Managerem.

Záložní chování podpory zprostředkovatele v MSAL Pythonu

MsAL buď dojde k chybě, nebo se bezobslužně vrátí do toků bez zprostředkovatele.

  1. MSAL bude ignorovat enable_broker_... a obejít zprostředkovatele v těchto ověřovacích tocích, u nichž je známo, že nejsou zprostředkovatelem podporovány. To zahrnuje ADFS, B2C atd. Další scénáře, „ve kterých lze použít zprostředkovatele“, naleznete níže.

  2. MSAL hlásí chybu, když se vývojář aplikace rozhodl používat brokera, ale není nainstalovaný balíček „mid-tier“ s přímou závislostí. Chybová zpráva vede vývojáře aplikací k deklaraci správné závislosti msal[broker]. Zde vyvoláme chybu, protože ji mohou vývojáři aplikací řešit.

  3. MSAL tiše „deaktivuje“ broker a přejde na variantu bez brokeru, pokud je tato možnost povolena a závislost je nainstalovaná, ale její inicializace selže. Předpokládáme, že k tomu dojde na zařízení, jehož operační systém je příliš starý, nebo je nějak nedostupná základní komponenta zprostředkovatele. Vývojář aplikace ani koncový uživatel s tím zde nemohou mnoho udělat. Zásady podmíněného přístupu nakonec vynutí, aby uživatel přepnul na jiné zařízení.

  4. MSAL hlásí chybu, když je zprostředkovatel povolený, nainstalovaný a inicializovaný, ale následné požadavky na token selžou.

Important

Pokud nejsou nainstalované balíčky související s zprostředkovateli a pokusíte se použít zprostředkovatele ověřování, zobrazí se chyba: ImportError: You need to install dependency by: pip install "msal[broker]>=1.xx,<2".

Note

Parametr parent_window_handle se vyžaduje, i když v Linuxu se nepoužívá. U aplikací s grafickým uživatelským rozhraním se určí umístění výzvy k přihlášení ad hoc a v současné době nelze svázat s určitým oknem. V budoucí aktualizaci se tento parametr použije k určení skutečného nadřazeného okna.

Ukládání tokenů do mezipaměti

Zprostředkovatel ověřování zpracovává ukládání do mezipaměti obnovovacího a přístupového tokenu. Nemusíte nastavovat vlastní ukládání do mezipaměti.

Vytvoření ukázkové aplikace

Ukázkovou aplikaci, která demonstruje, jak používat MSAL Python se zprostředkovatelem ověřování v systému Linux, najdete v úložišti MSAL Python na GitHubu. Ukázková aplikace se nachází v samples/console_app adresáři a obsahuje příklady použití zprostředkovatele pro ověřování.

Registrace aplikace

Aktualizujte registraci aplikace v portálu Azure tak, aby zahrnovala URI přesměrování specifické pro brokera pro Linux:

https://login.microsoftonline.com/common/oauth2/nativeclient

Závislosti Linuxu

Nejprve zkontrolujte, jestli máte python3 nainstalovaný v distribuci Linuxu.

python3 --version

Pokud ne, nainstalujte ho pomocí správce balíčků pro vaši distribuci.

Instalace na distribuci linuxu založené na debianu nebo Ubuntu:

sudo add-apt-repository -y universe
sudo apt update
sudo apt install python3 python3-pip libwebkit2gtk-4.1-dev -y

Závislosti Python

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.33.0b1,<2"

Vytvořit projekt

Po nakonfigurování můžete volat acquire_token_interactive , abyste získali token.

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"]
# Removed unused variable to avoid confusion


# 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"]))