Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pustaka Autentikasi Microsoft (MSAL) adalah Software Development Kit (SDK) yang memungkinkan aplikasi memanggil broker Single Sign-On Microsoft ke Linux, komponen Linux yang didistribusikan secara independen dari distribusi Linux, namun diinstal melalui manajer paket dengan sudo apt install microsoft-identity-broker atau sudo dnf install microsoft-identity-broker.
Komponen ini bertindak sebagai broker autentikasi, yang memungkinkan pengguna aplikasi Anda memanfaatkan integrasi dengan akun yang dikenali oleh Linux—seperti akun yang Anda gunakan untuk masuk ke sesi Linux untuk aplikasi yang menggunakan broker ini.
Broker tersebut juga dibundel sebagai dependensi untuk aplikasi yang dikembangkan oleh Microsoft (seperti Company Portal)). Contoh penginstalan broker yang diinstal adalah ketika komputer Linux terdaftar ke armada perangkat perusahaan melalui solusi manajemen titik akhir seperti Microsoft Intune.
Apa itu broker
Broker autentikasi adalah aplikasi yang berjalan pada komputer pengguna yang mengelola jabat tangan autentikasi dan pemeliharaan token untuk akun yang terhubung. Sistem operasi Linux menggunakan Microsoft single sign-on for Linux sebagai perantara autentikasi. Ini memiliki banyak manfaat bagi pengembang dan pelanggan, termasuk:
- Mengaktifkan Masuk Sekali: memungkinkan aplikasi menyederhanakan cara pengguna mengautentikasi dengan Microsoft Entra ID dan melindungi token penyegaran Microsoft Entra ID dari eksfiltrasi dan penyalahgunaan
- Keamanan yang ditingkatkan. Banyak peningkatan keamanan disertakan bersama broker, tanpa perlu memperbarui logika aplikasi.
- Dukungan fitur. Dengan bantuan broker, pengembang dapat mengakses beragam kemampuan OS dan layanan.
- Integrasi sistem. Aplikasi yang menggunakan broker plug-and-play dengan pemilih akun bawaan, memungkinkan pengguna untuk dengan cepat memilih akun yang ada alih-alih memasukkan kembali kredensial yang sama berulang-ulang.
- Perlindungan Token. Single sign-on Microsoft untuk Linux memastikan bahwa token penyegaran terikat ke perangkat.
Bagaimana cara memilih menggunakan broker?
- Dalam pustaka MSAL Python, kami telah memperkenalkan flag
enable_broker_on_linux, yang mengaktifkan broker baik di WSL maupun Linux mandiri.- Jika tujuan Anda adalah mengaktifkan dukungan broker hanya pada WSL untuk Azure CLI, Anda dapat mempertimbangkan untuk memodifikasi kode aplikasi Azure CLI guna mengaktifkan flag
enable_broker_on_wslkhusus di WSL. - Jika Anda menulis aplikasi lintas platform, Anda juga perlu menggunakan
enable_broker_on_windows, seperti yang diuraikan dalam artikel Menggunakan Python MSAL dengan Pengelola Akun Web. - Anda dapat mengatur kombinasi parameter keikutsertaan berikut ke true:
- Jika tujuan Anda adalah mengaktifkan dukungan broker hanya pada WSL untuk Azure CLI, Anda dapat mempertimbangkan untuk memodifikasi kode aplikasi Azure CLI guna mengaktifkan flag
| Penanda persetujuan | Jika aplikasi akan berjalan | Aplikasi telah mendaftarkan ini sebagai URI pengalihan platform Desktop di portal Azure |
|---|---|---|
| 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 |
| enable_broker_on_mac | Mac dengan Company Portal terinstal | msauth.com.msauth.unsignedapp://auth |
| mengaktifkan_broker_di_linux | Linux dengan Intune terinstal |
https://login.microsoftonline.com/common/oauth2/nativeclient (HARUS diaktifkan) |
Aplikasi Anda perlu mendukung URI pengalihan khusus broker. Untuk
Linuxkhususnya, URL untuk URI pengalihan harus:https://login.microsoftonline.com/common/oauth2/nativeclientUntuk menggunakan broker, Anda harus menginstal paket terkait broker selain MSAL inti dari PyPI:
pip install "msal[broker]>=1.33.0b1,<2"Setelah dikonfigurasi, Anda dapat memanggil
acquire_token_interactiveuntuk memperoleh token.result = app.acquire_token_interactive(["User.ReadBasic.All"], parent_window_handle=app.CONSOLE_WINDOW_HANDLE)
Parameter untuk dukungan broker
Parameter berikut tersedia untuk mengonfigurasi dukungan broker di Python MSAL. Parameter ini dapat diteruskan ke PublicClientApplication konstruktor atau ke acquire_token_interactive metode .
| Parameters: | Type | Deskripsi |
|---|---|---|
| enable_broker_on_windows | boolean |
Pengaturan ini hanya efektif jika aplikasi Anda berjalan di Windows 10+. Parameter ini default ke Tidak Ada, yang berarti MSAL tidak akan menggunakan broker. New in MSAL Python 1.25.0. |
| enable_broker_on_wsl | boolean |
Pengaturan ini hanya efektif jika aplikasi Anda berjalan di WSL. Parameter ini default ke Tidak Ada, yang berarti MSAL tidak akan menggunakan broker.
New in MSAL Python 1.25.0. |
| enable_broker_on_mac | boolean |
Pengaturan ini hanya efektif jika aplikasi Anda berjalan di Mac dengan Company Portal terinstal. Parameter ini default ke Tidak Ada, yang berarti MSAL tidak akan menggunakan broker.
New in MSAL Python 1.31.0. |
| mengaktifkan_broker_di_linux | boolean |
Pengaturan ini hanya efektif jika aplikasi Anda berjalan di Linux dengan Intune terinstal. Parameter ini default ke Tidak Ada, yang berarti MSAL tidak akan menggunakan broker.
New in MSAL Python 1.33.0. |
| parent_window_handle | int |
OPSIONAL |
Catatan mengenai parent_window_handle
Parameter parent_window_handle diperlukan meskipun di Linux tidak digunakan. Untuk aplikasi GUI, lokasi permintaan masuk akan ditentukan ad-hoc dan saat ini tidak dapat terikat ke jendela tertentu. Dalam pembaruan mendatang, parameter ini akan digunakan untuk menentukan jendela induk yang sebenarnya .
| Condition | Deskripsi |
|---|---|
| Aplikasi tidak ingin menggunakan broker | tidak perlu menentukan parent_window_handle |
| Aplikasi memilih untuk menggunakan broker | parent_window_handle wajib diisi |
| Aplikasi adalah aplikasi GUI yang berjalan di sistem Windows atau Mac | perlu memberikan handle jendelanya agar jendela masuk muncul di atas jendela Anda |
| Aplikasi adalah aplikasi konsol yang berjalan di sistem Windows atau Mac | dapat menggunakan placeholder PublicClientApplication.CONSOLE_WINDOW_HANDLE |
| Aplikasi dimaksudkan untuk menjadi aplikasi lintas platform | Aplikasi perlu menggunakan enable_broker_on_windows, seperti yang diuraikan dalam artikel Menggunakan Python MSAL dengan Pengelola Akun Web. |
Perilaku fallback pada dukungan broker di MSAL Python
MSAL akan mengalami kesalahan, atau mundur secara diam-diam ke alur non-broker.
MSAL akan mengabaikan enable_broker_... dan melewati broker pada alur autentikasi yang diketahui TIDAK didukung oleh broker. Ini termasuk ADFS, B2C, dll.. Untuk skenario "could-use-broker" lainnya, silakan lihat di bawah.
MSAL mengalami error saat pengembang aplikasi memilih menggunakan broker, tetapi paket "mid-tier" yang menjadi dependensi langsung tidak diinstal. Pesan kesalahan mengarahkan pengembang aplikasi untuk mendeklarasikan dependensi yang tepat, yaitu msal[broker]. Kami menampilkan error di sini karena error tersebut dapat ditindaklanjuti oleh pengembang aplikasi.
MSAL secara diam-diam "menonaktifkan" broker dan beralih kembali ke mode non-broker saat opsi ini dipilih, dependensi telah diinstal, tetapi gagal diinisialisasi. Kami mengantisipasi hal ini akan terjadi pada perangkat yang OS-nya terlalu tua atau komponen broker yang mendasar entah bagaimana tidak tersedia. Tidak banyak pengembang aplikasi atau pengguna akhir yang dapat melakukannya di sini. Pada akhirnya, kebijakan akses bersyarat akan memaksa pengguna untuk beralih ke perangkat lain.
MSAL mengalami error saat broker diaktifkan, diinstal, dan diinisialisasi, tetapi permintaan token berikutnya gagal.
Important
Jika paket terkait broker tidak diinstal dan Anda akan mencoba menggunakan broker autentikasi, Anda akan mendapatkan kesalahan: ImportError: You need to install dependency by: pip install "msal[broker]>=1.xx,<2".
Note
Parameter parent_window_handle diperlukan meskipun di Linux tidak digunakan. Untuk aplikasi GUI, lokasi permintaan masuk akan ditentukan ad-hoc dan saat ini tidak dapat terikat ke jendela tertentu. Dalam pembaruan mendatang, parameter ini akan digunakan untuk menentukan jendela induk yang sebenarnya .
Penyimpanan sementara token
Broker autentikasi menangani refresh dan penembolokan token akses. Anda tidak perlu mengatur cache kustom.
Membuat aplikasi contoh
Anda dapat menemukan aplikasi sampel yang menunjukkan cara menggunakan Python MSAL dengan broker autentikasi di Linux di repositori Python GitHub MSAL. Aplikasi sampel terletak di samples/console_app direktori dan menyertakan contoh cara menggunakan broker untuk autentikasi.
Pendaftaran Aplikasi
Perbarui pendaftaran Aplikasi Anda di portal Azure untuk menyertakan URI pengalihan khusus broker untuk Linux:
https://login.microsoftonline.com/common/oauth2/nativeclient
Ketergantungan Linux
Pertama, periksa apakah Anda telah menginstal python3 pada distribusi Linux Anda.
python3 --version
Jika tidak, instal menggunakan manajer paket untuk distribusi Anda.
Untuk menginstal pada distribusi Linux berbasis debian/Ubuntu:
sudo add-apt-repository -y universe
sudo apt update
sudo apt install python3 python3-pip libwebkit2gtk-4.1-dev -y
Dependensi Python
Untuk menggunakan broker, Anda harus menginstal paket terkait broker selain MSAL inti dari PyPI:
pip install "msal[broker]>=1.33.0b1,<2"
Buat Project
Setelah dikonfigurasi, Anda dapat memanggil acquire_token_interactive untuk memperoleh 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"]))