SSO inschakelen op systeemeigen Linux met MSAL Python

Microsoft Authentication Library (MSAL) is een softwareontwikkelingskit (SDK) waarmee apps de Microsoft Single Sign-on to Linux-broker kunnen aanroepen, een Linux-onderdeel dat onafhankelijk van de Linux-distributie wordt geleverd, maar dat met behulp van een pakketbeheerder wordt geïnstalleerd met sudo apt install microsoft-identity-broker of sudo dnf install microsoft-identity-broker.

Dit onderdeel fungeert als verificatiebroker, zodat de gebruikers van uw app kunnen profiteren van integratie met accounts die bekend zijn bij Linux, zoals het account dat u hebt aangemeld bij uw Linux-sessies voor apps die van de broker gebruikmaken.

De broker wordt ook gebundeld als een afhankelijkheid van toepassingen die zijn ontwikkeld door Microsoft (zoals Bedrijfsportal)). Een voorbeeld van de installatie van de broker die wordt geïnstalleerd, is wanneer een Linux-computer wordt ingeschreven bij het apparaatpark van een bedrijf via een oplossing voor eindpuntbeheer, zoals Microsoft Intune.

Wat is een broker?

Een verificatiebroker is een toepassing die wordt uitgevoerd op de computer van een gebruiker die de verificatiehanddruk- en tokenonderhoud voor verbonden accounts beheert. Het Linux-besturingssysteem gebruikt Microsoft Single Sign-On for Linux als authenticatiebroker. Het heeft veel voordelen voor ontwikkelaars en klanten, waaronder:

  • Maakt eenmalige aanmelding mogelijk: hiermee kunnen apps vereenvoudigen hoe gebruikers zich verifiëren met Microsoft Entra ID en worden Microsoft Entra ID vernieuwingstokens beschermd tegen exfiltratie en misbruik
  • Verbeterde beveiliging. Veel beveiligingsverbeteringen worden geleverd met de broker, zonder dat u de toepassingslogica hoeft bij te werken.
  • Functieondersteuning. Met behulp van de brokerontwikkelaars hebben ze toegang tot uitgebreide besturingssysteem- en servicemogelijkheden.
  • Systeemintegratie. Toepassingen die gebruikmaken van de broker plug-and-play met de ingebouwde accountkiezer, zodat de gebruiker snel een bestaand account kan kiezen in plaats van dezelfde referenties telkens opnieuw in te voeren.
  • Tokenbeveiliging. Microsoft eenmalige aanmelding voor Linux zorgt ervoor dat de refresh-tokens aan het apparaat zijn gebonden.

Hoe kunt u zich aanmelden voor het gebruik van broker?

  1. In de MSAL Python-bibliotheek hebben we de enable_broker_on_linux vlag geïntroduceerd, waarmee de broker op zowel WSL als zelfstandige Linux mogelijk is.
    • Als u brokerondersteuning alleen op WSL voor Azure CLI wilt inschakelen, kunt u overwegen de Azure CLI app-code te wijzigen om de enable_broker_on_wsl vlag exclusief op WSL te activeren.
    • Als u een platformonafhankelijke toepassing ontwikkelt, moet u ook enable_broker_on_windows gebruiken, zoals beschreven in het artikel MSAL Python gebruiken met Web Account Manager.
    • U kunt elke combinatie van de volgende opt-in-parameters instellen op true:
Vlag voor aanmelden Als de app wordt uitgevoerd op De app heeft dit geregistreerd als omleidings-URI voor desktopplatforms in Azure Portal
broker inschakelen in 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 waarop Bedrijfsportal geïnstalleerd msauth.com.msauth.unsignedapp://auth
broker_inschakelen_op_linux Linux waarop Intune is geïnstalleerd https://login.microsoftonline.com/common/oauth2/nativeclient (MOET zijn ingeschakeld)
  1. Uw toepassing moet ondersteuning bieden voor brokerspecifieke omleidings-URI's. Voor Linux het bijzonder moet de URL voor de omleidings-URI het volgende zijn:

    https://login.microsoftonline.com/common/oauth2/nativeclient
    
  2. Als u de broker wilt gebruiken, moet u de broker-gerelateerde pakketten installeren naast de kern-MSAL van PyPI:

    pip install "msal[broker]>=1.33.0b1,<2"
    
  3. Zodra deze is geconfigureerd, kunt u aanroepen acquire_token_interactive om een token te verkrijgen.

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

Parameters voor brokerondersteuning

De volgende parameters zijn beschikbaar voor het configureren van brokerondersteuning in MSAL Python. Deze parameters kunnen worden doorgegeven aan de PublicClientApplication constructor of aan de acquire_token_interactive methode.

Parameters: Type Description
broker inschakelen in Windows boolean Deze instelling is alleen effectief als uw app wordt uitgevoerd op Windows 10+. Deze parameter wordt standaard ingesteld op None, wat betekent dat MSAL geen broker gebruikt.

New in MSAL Python 1.25.0.
enable_broker_on_wsl boolean Deze instelling is alleen van kracht als uw app wordt uitgevoerd op WSL. Deze parameter wordt standaard ingesteld op None, wat betekent dat MSAL geen broker gebruikt.

New in MSAL Python 1.25.0.
enable_broker_on_mac boolean Deze instelling is alleen van kracht als uw app wordt uitgevoerd op Mac met Bedrijfsportal geïnstalleerd. Deze parameter wordt standaard ingesteld op None, wat betekent dat MSAL geen broker gebruikt.

New in MSAL Python 1.31.0.
broker_inschakelen_op_linux boolean Deze instelling is alleen van kracht als uw app wordt uitgevoerd op Linux waarop Intune is geïnstalleerd. Deze parameter wordt standaard ingesteld op None, wat betekent dat MSAL geen broker gebruikt.

New in MSAL Python 1.33.0.
parent_window_handle int OPTIONELE

Opmerkingen met betrekking tot parent_window_handle

De parent_window_handle parameter is vereist, ook al wordt deze niet gebruikt in Linux. Voor GUI-toepassingen wordt de locatie van de aanmeldingsprompt ad-hoc bepaald en kan momenteel niet worden gebonden aan een specifiek venster. In een toekomstige update zal deze parameter worden gebruikt om het daadwerkelijke bovenliggende venster te bepalen.

Condition Description
App wil geen broker gebruiken u hoeft geen parent_window_handle op te geven
App kiest ervoor om een broker te gebruiken parent_window_handle is vereist
App is een GUI-app die wordt uitgevoerd op Windows- of Mac-systeem vereist om de venstergreep op te geven, zodat het aanmeldingsvenster boven aan het venster wordt weergegeven
App is een console-app die wordt uitgevoerd op Windows- of Mac-systeem kan een plaatsaanduiding gebruiken PublicClientApplication.CONSOLE_WINDOW_HANDLE
App is bedoeld als een platformoverschrijdende toepassing De app moet enable_broker_on_windows gebruiken, zoals beschreven in het artikel MSAL-Python gebruiken met Web Account Manager.

Het fallbackgedrag van de brokerondersteuning van MSAL Python

MSAL zal een foutmelding geven of op de achtergrond terugvallen op niet-brokerstromen.

  1. MSAL zal de enable_broker_… negeren en omzeil de broker voor die authenticatiestromen waarvan bekend is dat ze niet door de broker worden ondersteund. Dit omvat ADFS, B2C, enzovoort. Zie hieronder voor andere scenario’s waarin een broker nuttig kan zijn.

  2. MSAL geeft een fout wanneer de appontwikkelaar ervoor heeft gekozen een broker te gebruiken, maar een rechtstreeks afhankelijk pakket, 'mid-tier', niet is geïnstalleerd. In het foutbericht wordt de app-ontwikkelaar begeleid bij het declareren van de juiste afhankelijkheid msal[broker]. We geven hier een foutmelding omdat app-ontwikkelaars daar iets mee kunnen.

  3. MSAL ‘deactiveert’ stilzwijgend de broker en valt, wanneer hiervoor is gekozen en de afhankelijkheid is geïnstalleerd maar niet kon worden geïnitialiseerd, terug op de niet-brokeroptie. We verwachten dat dit zou gebeuren op een apparaat waarvan het besturingssysteem te oud is of het onderliggende brokeronderdeel op een of andere manier niet beschikbaar is. Er is niet veel een app-ontwikkelaar of de eindgebruiker kan hier doen. Uiteindelijk dwingt het beleid voor voorwaardelijke toegang de gebruiker om over te schakelen naar een ander apparaat.

  4. MSAL geeft een fout wanneer de broker is ingeschakeld, geïnstalleerd en geïnitialiseerd, maar daaropvolgende tokenaanvragen mislukken.

Important

Als broker-gerelateerde pakketten niet zijn geïnstalleerd en u probeert de verificatiebroker te gebruiken, krijgt u een foutmelding: ImportError: You need to install dependency by: pip install "msal[broker]>=1.xx,<2"

Note

De parent_window_handle parameter is vereist, ook al wordt deze niet gebruikt in Linux. Voor GUI-toepassingen wordt de locatie van de aanmeldingsprompt ad-hoc bepaald en kan momenteel niet worden gebonden aan een specifiek venster. In een toekomstige update zal deze parameter worden gebruikt om het daadwerkelijke bovenliggende venster te bepalen.

Token-caching

De verificatiebroker verwerkt het vernieuwen en opslaan van toegangstokens. U hoeft geen aangepaste caching in te stellen.

Een voorbeeld-app bouwen

U vindt een voorbeeld-app die laat zien hoe u MSAL Python gebruikt met de verificatiebroker op Linux in de MSAL-Python GitHub-opslagplaats. De voorbeeld-app bevindt zich in de samples/console_app map en bevat voorbeelden van het gebruik van de broker voor verificatie.

App-registratie

Werk uw app-registratie bij in de Azure-portal om de brokerspecifieke omleidings-URI voor Linux op te nemen:

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

Linux-afhankelijkheden

Controleer eerst of Python3 is geïnstalleerd in uw Linux-distributie.

python3 --version

Als dat niet het is, installeert u deze met behulp van pakketbeheer voor uw distributie.

Installeren op debian/Ubuntu gebaseerde Linux-distributie:

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

Python-afhankelijkheden

Als u de broker wilt gebruiken, moet u de broker-gerelateerde pakketten installeren naast de kern-MSAL van PyPI:

pip install "msal[broker]>=1.33.0b1,<2"

Project maken

Zodra deze is geconfigureerd, kunt u aanroepen acquire_token_interactive om een token te verkrijgen.

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