Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Microsofts autentiseringsbibliotek (MSAL) är ett programvaruutvecklingspaket (SDK) som gör det möjligt för appar att anropa Microsoft-brokern för enkel inloggning i Linux, en Linux-komponent som distribueras oberoende av Linux-distributionen, men som installeras med hjälp av en pakethanterare med sudo apt install microsoft-identity-broker eller sudo dnf install microsoft-identity-broker.
Den här komponenten fungerar som en autentiseringsförmedlare, vilket gör att användarna av din app kan dra nytta av integration med konton som Linux känner till, till exempel kontot som du loggade in i dina Linux-sessioner med, för appar som använder förmedlaren.
Brokern medföljer också som ett beroende i program som utvecklats av Microsoft (till exempel Company Portal)). Ett exempel på när brokern installeras är när en Linux-dator registreras i ett företags enhetspark via en lösning för slutpunktshantering som Microsoft Intune.
Vad är en mäklare
En autentiseringskoordinator är ett program som körs på en användares dator som hanterar handskakningar för autentisering och tokenunderhåll för anslutna konton. Linux-operativsystemet använder Microsofts single sign-on för Linux som autentiseringsförmedlare. Det har många fördelar för både utvecklare och kunder, bland annat:
- Aktiverar enkel inloggning: gör det möjligt för appar att förenkla hur användare autentiserar med Microsoft Entra ID och skyddar Microsoft Entra ID uppdateringstoken från exfiltrering och missbruk
- Förbättrad säkerhet. Många säkerhetsförbättringar levereras med mäklaren, utan att applikationslogiken behöver uppdateras.
- Funktionsstöd. Med hjälp av brokern kan utvecklare få tillgång till rika OS- och tjänstfunktioner.
- Systemintegrering. Program som använder plugin-programmet broker med den inbyggda kontoväljaren, så att användaren snabbt kan välja ett befintligt konto i stället för att ange samma autentiseringsuppgifter om och om igen.
- Tokenskydd. Microsoft enkel inloggning för Linux säkerställer att uppdateringstokenen är bundna till enheten.
Så här väljer du att använda brokern
- I MSAL Python-biblioteket har vi introducerat flaggan
enable_broker_on_linux, som aktiverar förmedlaren för både WSL och fristående Linux-system.- Om målet är att endast aktivera brokerstöd på WSL för Azure CLI kan du överväga att ändra Azure CLI-appens kod för att aktivera flaggan
enable_broker_on_wslendast på WSL. - Om du skriver ett plattformsoberoende program måste du också använda
enable_broker_on_windows, enligt beskrivningen i artikeln Using MSAL Python with Web Account Manager (Använda MSAL-Python med Web Account Manager). - Du kan ange valfri kombination av följande anmälningsparametrar till true:
- Om målet är att endast aktivera brokerstöd på WSL för Azure CLI kan du överväga att ändra Azure CLI-appens kod för att aktivera flaggan
| Anmäl dig-flagga | Om appen kommer att köras på | Appen har registrerat detta som en omdirigerings-URI för skrivbordsplattform i Azure Portal |
|---|---|---|
| aktivera mäklare i 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 |
| enable_broker_on_mac | Mac med Company Portal installerat | msauth.com.msauth.unsignedapp://auth |
| aktivera mäklaren på Linux | Linux med Intune installerat |
https://login.microsoftonline.com/common/oauth2/nativeclient (MÅSTE vara aktiverat) |
Ditt program måste ha stöd för brokerspecifika omdirigerings-URI:er. Specifikt för
Linuxmåste URL:en för omdirigerings-URI:n vara:https://login.microsoftonline.com/common/oauth2/nativeclientFör att använda brokern måste du installera de brokerrelaterade paketen utöver MSAL-kärnpaketet från PyPI:
pip install "msal[broker]>=1.33.0b1,<2"När du har konfigurerat kan du anropa
acquire_token_interactiveför att hämta en token.result = app.acquire_token_interactive(["User.ReadBasic.All"], parent_window_handle=app.CONSOLE_WINDOW_HANDLE)
Parametrar för meddelandeförmedlarstöd
Följande parametrar är tillgängliga för att konfigurera stöd för koordinatorer i MSAL Python. Dessa parametrar kan skickas till PublicClientApplication konstruktorn eller till acquire_token_interactive -metoden.
| Parameters: | Type | Description |
|---|---|---|
| aktivera mäklare i Windows | boolean |
Den här inställningen gäller bara om appen körs på Windows 10+. Den här parametern har standardvärdet None, vilket innebär att MSAL inte kommer att använda en broker. New in MSAL Python 1.25.0. |
| enable_broker_on_wsl | boolean |
Den här inställningen gäller bara om din app körs på WSL. Den här parametern har standardvärdet None, vilket innebär att MSAL inte kommer att använda en broker.
New in MSAL Python 1.25.0. |
| enable_broker_on_mac | boolean |
Den här inställningen gäller bara om appen körs på Mac med Company Portal installerat. Den här parametern har standardvärdet None, vilket innebär att MSAL inte kommer att använda en broker.
New in MSAL Python 1.31.0. |
| aktivera mäklaren på Linux | boolean |
Den här inställningen gäller endast om din app körs på Linux med Intune installerat. Den här parametern har standardvärdet None, vilket innebär att MSAL inte kommer att använda en broker.
New in MSAL Python 1.33.0. |
| parent_window_handle | int |
Valfritt |
Anteckningar om parent_window_handle
Parametern parent_window_handle krävs även om den inte används i Linux. För GUI-program bestäms platsen för inloggningsprompten ad hoc och kan för närvarande inte bindas till ett specifikt fönster. I en framtida uppdatering används den här parametern för att fastställa det faktiska överordnade fönstret.
| Tillstånd | Description |
|---|---|
| Appen vill inte använda en broker | du behöver inte ange en parent_window_handle |
| Appen väljer att använda en förmedlare | parent_window_handle är obligatoriskt |
| Appen är en GUI-app som körs på Windows- eller Mac-system | måste ange sitt fönsterhandtag så att inloggningsfönstret visas ovanpå ditt fönster |
| App är en konsolapp som körs på Windows- eller Mac-system | kan använda en platshållare PublicClientApplication.CONSOLE_WINDOW_HANDLE |
| Appen är avsedd att vara ett plattformsoberoende program | Appen måste använda enable_broker_on_windows, enligt beskrivningen i artikeln Using MSAL Python with Web Account Manager (Använda MSAL-Python med Web Account Manager). |
Reservbeteenden för brokerstödet i MSAL Python
MSAL returnerar antingen ett fel eller faller tyst tillbaka till icke-brokerflöden.
MSAL kommer att ignorera enable_broker_… och kringgå brokern för de autentiseringsflöden som man vet INTE stöds av brokern. Detta inkluderar ADFS, B2C osv. För andra scenarier där en broker skulle kunna användas, se nedan.
MSAL ger ett fel när apputvecklaren har valt att använda en broker men ett direkt beroende, ”mellanskiktspaketet”, inte är installerat. Felmeddelandet vägleder apputvecklaren att deklarera rätt beroende msal[broker]. Här genererar vi ett fel eftersom apputvecklare kan vidta åtgärder utifrån felet.
MSAL "inaktiverar" tyst brokern och återgår till icke-broker när detta har aktiverats och beroendet är installerat men inte kan initieras. Vi förväntar oss att detta skulle inträffa på en enhet vars operativsystem är för gammalt eller om den underliggande koordinatorkomponenten på något sätt inte är tillgänglig. Det finns inte mycket en apputvecklare eller slutanvändaren kan göra här. Slutligen ska principen för villkorlig åtkomst tvinga användaren att byta till en annan enhet.
MSAL ger ett fel när broker har aktiverats, installerats och initierats, men efterföljande tokenbegäranden misslyckades.
Important
Om broker-relaterade paket inte är installerade och du kommer att försöka använda autentiseringskoordinatorn får du ett fel: ImportError: You need to install dependency by: pip install "msal[broker]>=1.xx,<2".
Note
Parametern parent_window_handle krävs även om den inte används i Linux. För GUI-program bestäms platsen för inloggningsprompten ad hoc och kan för närvarande inte bindas till ett specifikt fönster. I en framtida uppdatering används den här parametern för att fastställa det faktiska överordnade fönstret.
Cachelagring av token
Autentiseringskoordinatorn hanterar cachelagring av uppdaterings- och åtkomsttoken. Du behöver inte konfigurera anpassad cachelagring.
Skapa en exempelapp
Du hittar en exempelapp som visar hur du använder MSAL Python med autentiseringskoordinatorn i Linux på MSAL-Python GitHub-lagringsplatsen. Exempelappen finns i katalogen samples/console_app och innehåller exempel på hur man använder mäklaren för autentisering.
Appregistrering
Uppdatera din appregistrering i Azure-portalen så att den innehåller den mäklarspecifika omdirigerings-URI:n för Linux:
https://login.microsoftonline.com/common/oauth2/nativeclient
Linux-beroenden
Kontrollera först om du har Python3 installerat på din Linux-distribution.
python3 --version
Annars installerar du den med hjälp av pakethanteraren för distributionen.
Så här installerar du på debian/Ubuntu-baserad Linux-distribution:
sudo add-apt-repository -y universe
sudo apt update
sudo apt install python3 python3-pip libwebkit2gtk-4.1-dev -y
Python-beroenden
För att använda brokern måste du installera de brokerrelaterade paketen utöver MSAL-kärnpaketet från PyPI:
pip install "msal[broker]>=1.33.0b1,<2"
Skapa projekt
När du har konfigurerat kan du anropa acquire_token_interactive för att hämta en 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"]))