Menangani kesalahan dan pengecualian di MSAL untuk Python

Di MSAL untuk Python, sebagian besar kesalahan disampaikan sebagai nilai pengembalian dari panggilan API. Kesalahan direpresentasikan sebagai kamus yang berisi respons JSON dari platform identitas Microsoft.

  • Respons yang berhasil berisi kunci "access_token" . Format respons ditentukan oleh protokol OAuth2. Untuk informasi selengkapnya, lihat 5.1 Respons yang Berhasil
  • Respons kesalahan berisi "error" dan biasanya "error_description". Format respons ditentukan oleh protokol OAuth2. Untuk informasi selengkapnya, lihat Respons Kesalahan 5.2

Saat kesalahan ditampilkan, kunci "error" berisi kode yang dapat dibaca oleh mesin. "error" Jika adalah, misalnya, "interaction_required", Anda dapat meminta pengguna untuk memberikan informasi tambahan untuk menyelesaikan proses autentikasi. "error" Jika adalah "invalid_grant", Anda dapat meminta pengguna untuk memasukkan kembali kredensial mereka. Cuplikan berikut adalah contoh penanganan kesalahan di MSAL untuk Python.


from msal import ConfidentialClientApplication

authority_url = "https://login.microsoftonline.com/your_tenant_id"
client_id = "your_client_id"
client_secret = "your_client_secret"
scopes = ["https://graph.microsoft.com/.default"]

app = ConfidentialClientApplication(client_id, authority=authority_url, client_credential=client_secret)

result = app.acquire_token_silent(scopes=scopes, account=None)

if not result:
    result = app.acquire_token_silent(scopes=scopes)

if "access_token" in result:
    print("Access token: %s" % result["access_token"])
else:
    print("Error: %s" % result.get("error"))

Ketika kesalahan dikembalikan, "error_description" kunci juga berisi pesan yang dapat dibaca manusia, dan biasanya ada juga "error_code" kunci yang berisi kode kesalahan platform identitas Microsoft yang dapat dibaca mesin. Untuk informasi selengkapnya tentang berbagai kode kesalahan platform identitas Microsoft, lihat Kode kesalahan autentikasi dan otorisasi.

Di MSAL untuk Python, pengecualian jarang terjadi karena sebagian besar kesalahan ditangani dengan mengembalikan nilai kesalahan. Pengecualian ValueError hanya dilempar saat ada masalah dalam cara Anda menggunakan pustaka ini, misalnya ketika parameter API tidak valid formatnya.

Tantangan Akses Bersyarat dan Klaim

Saat mendapatkan token secara diam-diam, aplikasi Anda mungkin menerima kesalahan ketika tantangan klaim Akses Bersyarat seperti kebijakan MFA diperlukan oleh API yang coba Anda akses.

Pola untuk menangani kesalahan ini adalah memperoleh token secara interaktif menggunakan MSAL. Ini meminta pengguna dan memberi mereka kesempatan untuk memenuhi kebijakan Akses Bersyarat yang diperlukan.

Dalam kasus tertentu saat memanggil API yang memerlukan Akses Bersyarat, Anda dapat menerima tantangan klaim dalam kesalahan dari API. Misalnya jika kebijakan Akses Bersyarat adalah memiliki perangkat terkelola (Intune) kesalahan akan menjadi sesuatu seperti AADSTS53000: Perangkat Anda harus dikelola untuk mengakses sumber daya ini atau sesuatu yang serupa. Dalam hal ini, Anda dapat meneruskan klaim dalam panggilan token akuisisi sehingga pengguna diminta untuk memenuhi kebijakan yang sesuai.

Mencoba kembali setelah kesalahan dan pengecualian

MSAL melakukan panggilan HTTP ke layanan Microsoft Entra, dan terkadang kegagalan dapat terjadi. Misalnya jaringan dapat mati atau server kelebihan beban.

MSAL Python 1.11+ secara otomatis melakukan satu kali percobaan ulang untuk Anda. Anda dapat menyesuaikan perilaku ini dengan mengikuti http_client instruksi kustomisasi.

HTTP 429

Ketika Server Token Layanan (STS) kelebihan beban karena terlalu banyak permintaan, server akan mengembalikan kesalahan HTTP 429 beserta petunjuk tentang berapa lama lagi Anda dapat mencoba kembali dalam bidang respons Retry-After.

Aplikasi Anda diharapkan membatasi laju permintaan berikutnya, dan hanya mencoba lagi setelah jangka waktu yang ditentukan.

MSAL Python 1.16+ memudahkan Anda untuk mencoba kembali permintaan autentikasi sesuai permintaan (misalnya, setiap kali pengguna akhir mengklik tombol masuk lagi), MSAL Python 1.16+ akan secara otomatis membatasi upaya coba lagi tersebut dengan mengembalikan respons kesalahan yang sama dari cache HTTP, dan hanya mengirimkan panggilan HTTP nyata ketika panggilan tersebut dicoba setelah periode yang ditentukan.

Secara bawaan, mekanisme pembatasan ini bekerja dengan menyimpan informasi pembatasan ke dalam cache HTTP bawaan di dalam memori. Anda dapat memberikan objek mirip dict Anda sendiri sebagai cache HTTP, yang dapat Anda kendalikan cara menyimpan kontennya secara persisten. Lihat dokumentasi MSAL Python API untuk detail selengkapnya.

Langkah berikutnya