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.
Latar belakang
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. Mendapatkan token secara interaktif akan meminta pengguna untuk melakukan tindakan dan memberi pengguna kesempatan untuk memenuhi kebijakan Akses Bersyarat yang diperlukan.
Note
Ada kebijakan akses bersyarat tertentu yang tidak memerlukan interaksi pengguna untuk mematuhi kebijakan. Dalam kasus seperti itu, disarankan untuk menggunakan metode acquire_token_silent untuk menangani tantangan klaim yang dikembalikan dan menghindari mendorong interaksi pengguna.
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.
Menangani Tantangan Klaim di Python MSAL
Saat memanggil API yang memerlukan Akses Bersyarat, aplikasi Anda harus menangani kesalahan tantangan klaim. Ini akan muncul sebagai respons kesalahan Python MSAL di mana properti Klaim tidak akan kosong.
Untuk menangani tantangan klaim, Anda perlu menggunakan parameter claims_challenge dari metode get_authorization_request_url(). Dalam kasus yang tidak memerlukan interaksi, Anda harus menggunakan claims_challenge parameter dalam acquire_token_silent() metode dan metode akan menggunakan token refresh untuk mendapatkan token baru.
Tantangan klaim adalah arahan di header www-authenticate yang akan ditanggapi oleh penyedia sumber daya (misalnya: MS Graph), ketika token akses tidak diotorisasi dan token akses baru diperlukan. Contoh tantangan klaim dari penyedia sumber daya (misalnya MS Graph) akan terlihat seperti ini. Ini terdiri dari kode Status HTTP yang harus 401 dan header www-authenticate yang berisi bidang yang disebutkan di atas.
HTTP 401; Unauthorized
www-authenticate=Bearer realm="",
authorization_uri="https://login.microsoftonline.com/common/oauth2/authorize",
error="insufficient_claims",
claims="returned_claims"
Klien perlu mengekstrak klaim dan kemudian meneruskannya ke metode acquire_token_by_*. Jika nilai klaim yang dikembalikan dari sumber daya dikodekan base64, nilai tersebut perlu didekodekan sebelum memanggil MSAL. Metode acquire_token MSAL menerima klaim sebagai string json. Ini adalah contoh bagaimana klaim yang dikembalikan dari penyedia sumber daya dapat ditangani menggunakan alur kode otorisasi.
claims_challenge = "claims returned from resource provider"
# if claims parameter is encoded, decode it and use the decoded claims
# decoded_claims_challenge = str(base64.b64decode(claims), "utf-8")
result = None
# Since you were using your previous AT and then met a claims challenge,
# you should've already be in a context with the current signed-in user.
# Here we assume you somehow already have that account,
# or you could possibly get it like this:
accounts = app.get_accounts()
assert accounts
account = accounts[0]
result = app.acquire_token_silent(scope, account=account, claims_challenge=claims_challenge)
if not result:
# Auth endpoint call for interactive login (you can use auth url helper)
auth_url = app.get_authorization_request_url(..., claims_challenge=claims_challenge)
# Make a request to this auth_url to get back authorization_code
result = app.acquire_token_by_authorization_code(..., claims_challenge=claims_challenge)
- Token akses baru ini sekarang dapat digunakan dalam permintaan ke sumber daya.