Menggunakan Python MSAL dengan Pengelola Akun Web

Jika Anda membangun aplikasi Windows, Anda mungkin mempertimbangkan untuk menyederhanakan cara pengguna mengautentikasi dengan bantuan broker autentikasi. Web Account Manager (WAM) adalah broker autentikasi yang bekerja dengan Python MSAL. WAM hanya tersedia di Windows 10 ke atas, serta Server Windows 2019 ke atas.

Untuk informasi selengkapnya tentang manfaat menggunakan broker autentikasi, lihat Apa itu broker dalam dokumentasi MSAL.NET.

Penggunaan

Untuk menggunakan broker, Anda harus menginstal paket terkait broker selain MSAL inti dari PyPI:

pip install msal[broker]>=1.20,<2

Jika paket terkait broker tidak diinstal dan Anda mencoba menggunakan broker autentikasi, Anda akan mendapatkan kesalahan ImportError: Anda perlu menginstal dependensi dengan: pip install "msal[broker]>=1.20,2<".

Selanjutnya, buat instance baru PublicClientApplication dan setel enable_broker_on_windows ke True. Ini akan memastikan bahwa MSAL akan mencoba berkomunikasi dengan WAM alih-alih membuka jendela peramban baru. Jika Anda menulis aplikasi lintas platform, Anda juga perlu menggunakan enable_broker_on_mac, seperti yang diuraikan dalam artikel Menggunakan Python MSAL dengan Broker Autentikasi di macOS.

from msal import PublicClientApplication

app = PublicClientApplication(
    "CLIENT_ID",
    authority="https://login.microsoftonline.com/common",
    enable_broker_on_windows=True)

Anda sekarang dapat memperoleh token dengan memanggil acquire_token_interactive dan menentukan handel jendela induk melalui parent_window_handle:

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

Handle jendela induk diperlukan oleh WAM untuk memastikan bahwa dialog ditampilkan dengan benar di atas jendela yang meminta. MSAL tidak menentukannya secara langsung karena ada banyak variabel yang dapat memengaruhi jendela mana yang perlu dikaitkan dengan WAM, dan pengembang aplikasi adalah pihak yang paling tepat untuk memutuskan jendela mana yang seharusnya digunakan.

Untuk aplikasi konsol, MSAL mempermudahnya dengan menawarkan solusi siap pakai untuk mendapatkan handle jendela terminal - CONSOLE_WINDOW_HANDLE. Untuk aplikasi desktop, mungkin diperlukan upaya tambahan dengan API Windows untuk mendapatkan handle jendela. Paket pembantu, seperti pywin32 dapat membantu panggilan API.

Sebelum menjalankan aplikasi, pastikan Anda mengonfigurasi URL pengalihan untuk aplikasi desktop:

Untuk menggunakan broker Windows, aplikasi Anda harus memiliki URL pengalihan yang benar yang dikonfigurasi dalam portal Azure, dalam bentuk:

ms-appx-web://microsoft.aad.brokerplugin/YOUR_CLIENT_ID

Jika URL pengalihan tidak dikonfigurasi, Anda akan mendapatkan broker_error yang mirip dengan (pii). Status: Response_Status.Status_ApiContractViolation, Kode kesalahan: 3399614473, Tag: 557973642.

Jika konfigurasi dan pembuatan instance sudah benar, setelah Anda menjalankan aplikasi, Anda akan melihat broker autentikasi mulai berfungsi dan memungkinkan pengguna memilih akun yang ingin digunakan untuk melakukan autentikasi.

Contoh WAM yang dipanggil dari Python

Perlu dicatat bahwa jika Anda beralih ke penggunaan autentikasi berbasis broker, dan pengguna sebelumnya sudah masuk serta status login masih valid, pemanggilan acquire_token_interactive tetap akan memicu upaya memperoleh token secara senyap, dan hanya akan menampilkan permintaan login jika diperlukan. Jika Anda lebih suka selalu meminta konfirmasi, Anda dapat menggunakan parameter opsional prompt="select_account" ini.

Perbedaan pengalaman broker

Bergantung pada otoritas yang ditentukan saat menginstansiasi PublicClientApplication, antarmuka pengguna broker mungkin berbeda.

/Konsumen

Digunakan untuk mengautentikasi hanya dengan akun Microsoft pribadi.

UI WAM untuk konsumen

/common

Digunakan untuk mengautentikasi dengan akun Microsoft pribadi serta akun kerja dan sekolah.

WAM UI untuk akun pribadi dan kerja

/Organisasi

Digunakan untuk mengautentikasi hanya dengan akun kantor dan sekolah.

WAM UI hanya untuk akun kerja

Jika login_hint disediakan, tetapi akun belum terdaftar di WAM, petunjuk akan secara otomatis diisi di bidang Email atau telepon .

/TENANT_ID

Digunakan hanya untuk mengautentikasi akun kerja dan sekolah dalam tenant yang ditentukan.

WAM UI untuk akun khusus penyewa

Jika login_hint disediakan, tetapi akun belum terdaftar di WAM, petunjuk akan secara otomatis diisi di bidang Email atau telepon .