Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
MSAL è in grado di richiamare il Single Sign-On di Microsoft per Linux, un componente Linux distribuito separatamente dalla distribuzione Linux; tuttavia, viene installato tramite un gestore di pacchetti usando sudo apt install microsoft-identity-broker o sudo dnf install microsoft-identity-broker.
Questo componente funge da broker di autenticazione, consentendo agli utenti della tua app di beneficiare dell'integrazione con gli account riconosciuti da Linux, ad esempio l'account usato per accedere alle sessioni Linux per le app che utilizzano il broker. Viene anche raggruppata come dipendenza di applicazioni sviluppate da Microsoft, ad esempio Portale aziendale. Queste applicazioni vengono installate quando un computer Linux viene registrato nella flotta di dispositivi di una società tramite una soluzione di gestione degli endpoint come Microsoft Intune.
L'uso di un broker di autenticazione in Linux consente di semplificare l'autenticazione degli utenti con Microsoft Entra ID dall'applicazione e sfruttare le funzionalità future che proteggono Microsoft Entra ID token di aggiornamento dall'esfiltrazione e dall'uso improprio.
Per abilitare l'accesso SSO nell'app WSL usando MSAL Python, è necessario assicurarsi che il keychain sia configurato e sbloccato, perché MSAL usa libsecret per comunicare con il daemon di keyring.
Esempio di flusso di autenticazione WSL
In una situazione in cui si dispone di un'app WSL che deve eseguire l'autenticazione con Microsoft Entra ID, il flusso di autenticazione per una richiesta interattiva sarà simile al seguente:
Eseguire l'aggiornamento alla versione più recente di WSL
Assicurarsi di aver eseguito l'aggiornamento alla versione più recente di WSL. La finestra di dialogo Controllo account WAM è supportata nelle versioni WSL 2.4.13 e successive.
# To check what distros are available:
wsl.exe --list --online
wsl.exe --install Ubuntu-22.04
# To check the WSL version:
wsl --version
# To update WSL:
wsl --update
Dipendenze dei pacchetti Linux
Installare le dipendenze seguenti nella piattaforma Linux:
-
libsecret-toolsè necessario per interfacciarsi con il keychain Linux
Per eseguire l'installazione in una distribuzione Linux basata su Debian/Ubuntu:
sudo add-apt-repository -y universe
sudo apt update
sudo apt install libwebkit2gtk-4.1-dev libsecret-1-0 -y
#from Powershell, run
wsl.exe --shutdown
Importante
Affinché il portachiavi funzioni come previsto, assicurati di 1. installare le dipendenze, 2. Riavviare/reinizializzare WSL, 3. Configurare il portachiavi. Se non si eseguono i passaggi nell'ordine corretto, il keychain non contiene l'opzione "Portachiavi password".
Configurare il portachiavi in WSL
MSAL usa libsecret in Linux. È necessario comunicare con il keyring daemon. Gli utenti possono usare Seahorse (un'applicazione GNOME per la gestione delle chiavi di crittografia e delle password) per gestire i contenuti di keyring tramite un'interfaccia utente grafica (GUI).
Nelle distribuzioni basate su Debian è possibile installare il pacchetto eseguendo sudo apt install seahorse e seguendo queste istruzioni:
Eseguire
seahorsenel terminale come utente normale (non come sudo)
Nell'angolo in alto a sinistra, seleziona + e crea il portachiavi Password.
Crea un keyring denominato 'login'
Impostare la password nella finestra di dialogo successiva.
Esegui
wsl.exe --shutdownnel Terminale di Windows.Avviare una nuova sessione WSL ed eseguire l'esempio. Ti dovrebbe essere richiesta la password del keyring.
Eseguire un'app di esempio
Per usare un broker sulla piattaforma Linux, assicurarsi di impostare BrokerOptions su OperatingSystems.Linux come illustrato nel frammento di codice seguente:
Fare riferimento a Enable SSO in native Linux apps using MSAL Python per informazioni su come configurare il progetto.
Dipendenze di Python
Per usare il broker, è necessario installare i pacchetti correlati al broker oltre al core MSAL da PyPI:
pip install "msal[broker]>=1.33.0b1,<2"
Esegui l'app di esempio
Dopo la configurazione, è possibile chiamare acquire_token_interactive per acquisire un token. Salvare quanto segue come wsl_broker.py:
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"]
# 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"]))
Eseguire l'esempio
Eseguire l'app di esempio usando il comando seguente:
python wsl_broker.py
Verrà visualizzato un prompt per:
- immettere il nome utente/le credenziali
- Inserisci la password del portachiavi
- l'app acquisirà quindi un token e lo stamperà nella console