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.
MSAL bukan pustaka OAuth2 tingkat rendah. MSAL membungkus dan menyembunyikan konsep Refresh Token (RT) dari Anda. Jadi, jika Anda memulai proyek Anda dengan MSAL Python dan mengikuti pola penggunaan 3 langkahnya (khususnya, langkah 2), Anda bahkan tidak perlu tahu dan peduli tentang di mana menyimpan RT, cara mencarinya, dan kapan harus memperbaruinya. MSAL Python secara otomatis menangani semua kerumitan penyimpanan cache token untuk Anda, dan pengguna akhir Anda hanya akan melihat permintaan masuk seminimal mungkin.
Tetapi jika proyek Anda yang ada menggunakan pustaka OAuth2 lainnya (termasuk tetapi tidak terbatas pada Python ADAL) dan RTs Anda disimpan di sana, dan sekarang Anda ingin memigrasikan proyek Anda ke Python MSAL, Anda mungkin juga ingin memigrasikan RTs tersebut ke MSAL Python sehingga pengguna akhir Anda yang ada tidak perlu masuk lagi.
Mulai dari MSAL Python 0.6.0, salah satu cara untuk melakukannya, adalah dengan menggunakan MSAL Python untuk memperoleh token akses baru dengan RT sebelumnya, dan kemudian ketika RT baru kembali, MSAL akan menyimpannya dengan cara biasa.
Karena metode ini ditujukan untuk skenario yang tidak khas, metode ini TIDAK mudah diakses dengan permukaan API resmi.
Anda harus memanggilnya melalui pembantu app.clientinternal , dan konvensi penamaannya juga sedikit berbeda dari API resmi lainnya.
from msal import PublicClientApplication
def get_preexisting_rt_and_their_scopes_from_elsewhere(...):
raise NotImplementedError("You will need to implement this by yourself")
app = PublicClientApplication(..., token_cache=...)
for old_rt, old_scope in get_preexisting_rt_and_their_scopes_from_elsewhere(...):
# Assuming the old scope could be a space-delimited string,
# in MSAL we expect a list, like ["scope1", "scope2"].
scopes = old_scope.split()
# If your old RT came from ADAL Python which uses resource rather than scope,
# you need to somehow convert your v1 resource into v2 scopes
# See /azure/active-directory/develop/azure-ad-endpoint-comparison#scopes-not-resources
# You can probably just append "/.default" to your v1 resource to form a scope
# See /azure/active-directory/develop/v2-permissions-and-consent#the-default-scope
result = app.client.obtain_token_by_refresh_token(old_rt, scope=scopes)
# Providing that the above function call would succeed, the new token(s) would be returned,
# a new RT would be issued by Microsoft Identity platform and be stored in new msal cache.
Anda juga dapat menggunakan metode ini untuk berbagai skenario integrasi di mana Anda memiliki token refresh yang tersedia.
Migrasi dari Python ADAL ke Python MSAL
Differences
Jika Anda sudah terbiasa dengan titik akhir Azure AD untuk pengembang (v1.0) (dan ADAL Python), Anda mungkin ingin membaca Apa yang berbeda tentang titik akhir platform identitas Microsoft (v2.0)?.
Cakupan, bukan sumber daya
ADAL Python memperoleh token untuk sumber daya, tetapi MSAL Python memperoleh token untuk cakupan. Permukaan API di Python MSAL tidak lagi memiliki paramater sumber daya. Anda perlu menyediakan scope berupa daftar string yang menyatakan izin dan sumber daya yang diminta. Cakupan terkenal adalah cakupan Microsoft Graph.
Anda dapat menggunakan akhiran cakupan /.default untuk membantu memigrasikan aplikasi Anda dari titik akhir v1.0 (ADAL) ke titik akhir platform identitas Microsoft (MSAL). Misalnya, nilai cakupan https://graph.microsoft.com/.default secara fungsional sama dengan endpoint v1.0 resource=https://graph.microsoft.com. Bahkan jika sumber daya Anda tidak dalam formulir URL, tetapi ID sumber daya pada formulir resource_id = "XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX", Anda masih dapat menggunakan scope = [ resource_id + "/.default" ].
Referensi:
Pemetaan API
| API di ADAL Python | Secara kasar memetakan ke API di Python MSAL |
|---|---|
| AuthenticationContext | PublicClientApplication atau ConfidentialClientApplication |
| N/A | get_authorization_request_url() |
| acquire_token_with_authorization_code() | acquire_token_by_authorization_code() |
| acquire_token() | acquire_token_silent() |
| acquire_token_with_refresh_token() | N/A (Lihat detail di bagian ini) |
| acquire_user_code() | initiate_device_flow() |
| acquire_token_with_device_code() dan cancel_request_to_get_token_with_device_code() | acquire_token_by_device_flow() |
| acquire_token_with_username_password() | acquire_token_by_username_password() |
| acquire_token_with_client_credentials() dan acquire_token_with_client_certificate() | acquire_token_for_client() |
| N/A | acquire_token_on_behalf_of() |
| TokenCache() | SerializableTokenCache() |
| N/A | Cache dengan penyimpanan persisten, tersedia melalui MSAL Extensions |