Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk a Microsoft Authentication Library (MSAL) használatához az Azure Active Directory Hitelesítési kódtárat (ADAL) használó alkalmazások áttelepítéséhez szükséges módosításokat ismerteti.
Többet is megtudhat az MSAL-ról, és a Pythonhoz készült Microsoft Authentication Library áttekintésével megismerkedhet a használatával.
Különbségi kiemelések
Az ADAL a Azure Active Directory (Azure AD) 1.0-s verziójú végpontjával működik. A Microsoft Authentication Library (MSAL) a Microsoft Identitásplatform - korábbi nevén a Azure Active Directory v2.0-végponttal működik. A Microsoft Identitásplatform abban különbözik Azure AD 1.0-s verziótól:
Támogatja:
Munkahelyi és iskolai fiókok (Microsoft Entra ID kiépített fiókok)
Személyes fiókok (például Outlook.com vagy Hotmail.com)
Azok az ügyfelei, akik a saját e-mail-címüket vagy közösségimédia-azonosítójukat (például LinkedIn-, Facebook- vagy Google-fiókjukat) használják az Azure AD B2C szolgáltatáson keresztül
Kompatibilis-e a szabványok a következőkkel:
- OAuth 2.0-s verzió
- OpenID Connect (OIDC)
Az MSAL-ról további információt az MSAL áttekintésében talál.
Hatókörök, nem erőforrások
Az ADAL Python jogkivonatokat szerez be az erőforrásokhoz, az MSAL Python azonban jogkivonatokat szerez be a hatókörökhöz. Az MSAL-Python API-felülete már nem rendelkezik erőforrásparaméterével. Olyan sztringek listájaként kell megadnia a hatóköröket, amelyek deklarálják a kívánt engedélyeket és erőforrásokat. A hatókörökre vonatkozó példák megtekintéséhez tekintse meg Microsoft Graph hatóköreit.
Hozzáadhatja a /.default hatókör-utótagot az erőforráshoz, hogy megkönnyítse az alkalmazásai migrálását a v1.0-végpontról (ADAL) a Microsoft identitásplatformra (MSAL). Az erőforrásérték https://graph.microsoft.comesetében például az egyenértékű hatókör értéke .https://graph.microsoft.com/.default Ha az erőforrás nem szerepel az URL-űrlapon, hanem az űrlap XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXXerőforrás-azonosítója, akkor is használhatja a hatókör értékét XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX/.default.
A különböző hatókörökkel kapcsolatos további részletekért tekintse meg a Microsoft Identitásplatform engedélyeit és beleegyezését, valamint az 1.0-s jogkivonatokat elfogadó webes API hatóköreit.
Hibakezelés
A Pythonhoz készült ADAL a AdalError kivételt használja annak jelzésére, hogy hiba történt. A Pythonhoz készült MSAL jellemzően hibakódokat használ helyette. További információ: MSAL Python hibakezelés.
API-módosítások
Az alábbi táblázat felsorolja az ADAL for Python API-jait és az MSAL for Pythonban helyettük használandó megfelelőiket:
| ADAL Python API-hoz | MSAL Python API-hoz |
|---|---|
| AuthenticationContext | PublicClientApplication vagy ConfidentialClientApplication |
| N/A | acquire_token_interactive |
| N/A | get_authorization_request_url |
| N/A | initiate_auth_code_flow |
| acquire_token_with_authorization_code() | acquire_token_by_auth_code_flow |
| acquire_token() | acquire_token_silent |
| acquire_token_with_refresh_token() | Ez a két segítő csak a migrálás során használható: acquire_token_by_refresh_token |
| acquire_user_code() | initiate_device_flow |
| acquire_token_with_device_code() és 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() és acquire_token_with_client_certificate() | acquire_token_for_client |
| N/A | acquire_token_on_behalf_of |
| TokenCache() | SerializableTokenCache |
| N/A | Perzisztens gyorsítótár, elérhető az MSAL Extensions csomagból |
Meglévő frissítési tokenek migrálása az MSAL Pythonhoz
Az MSAL absztrahálja a frissítési tokenek fogalmát. Az MSAL Python alapértelmezés szerint memóriában lévő jogkivonat-gyorsítótárat biztosít, így nincs szükség a frissítési jogkivonatok tárolására, visszakeresésére vagy frissítésére. A felhasználók kevesebb bejelentkezési kérést is láthatnak, mert a frissítési jogkivonatok általában felhasználói beavatkozás nélkül frissíthetők. A tokengyorsítótárral kapcsolatos további információkért lásd a tokengyorsítótár egyéni szerializálása az MSAL Pythonhoz készült verziójában című témakört.
Az alábbi kód segítséget nyújt egy másik OAuth2-kódtár (beleértve többek között az ADAL Pythont) által kezelt frissítési tokenek áttelepítésében, hogy azokat az MSAL for Python kezelje. A frissítési tokenek migrálásának egyik oka az, hogy a meglévő felhasználóknak ne kelljen újra bejelentkezniük, amikor az alkalmazását áttelepíti az MSAL for Pythonra.
A frissítési token migrálásának módja az, hogy az MSAL for Python használatával az előző frissítési tokennel új hozzáférési tokent kér le. Amikor az új frissítési token visszaadásra kerül, a Pythonhoz készült MSAL eltárolja azt a gyorsítótárban. Az MSAL Python 1.3.0-s verziója óta erre a célra egy API-t biztosítunk magában az MSAL-ben. Kérjük, tekintse meg a következő kódrészletet, amely a az MSAL Pythonnal végzett frissítési tokenek migrálásának elkészült mintájából van idézve.
import msal
def get_preexisting_rt_and_their_scopes_from_elsewhere():
# Maybe you have an ADAL-powered app like this
# https://github.com/AzureAD/azure-activedirectory-library-for-python/blob/1.2.3/sample/device_code_sample.py#L72
# which uses a resource rather than a scope,
# you need to convert your v1 resource into v2 scopes
# See https://learn.microsoft.com/azure/active-directory/develop/migrate-python-adal-msal#scopes-not-resources
# You may be able to append "/.default" to your v1 resource to form a scope
# See https://learn.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent#the-default-scope
# Or maybe you have an app already talking to the Microsoft identity platform,
# powered by some 3rd-party auth library, and persist its tokens somehow.
# Either way, you need to extract RTs from there, and return them like this.
return [
("old_rt_1", ["scope1", "scope2"]),
("old_rt_2", ["scope3", "scope4"]),
]
# We will migrate all the old RTs into a new app powered by MSAL
app = msal.PublicClientApplication(
"client_id", authority="...",
# token_cache=... # Default cache is in memory only.
# You can learn how to use SerializableTokenCache from
# https://msal-python.readthedocs.io/en/latest/#msal.SerializableTokenCache
)
# We choose a migration strategy of migrating all RTs in one loop
for old_rt, scopes in get_preexisting_rt_and_their_scopes_from_elsewhere():
result = app.acquire_token_by_refresh_token(old_rt, scopes)
if "error" in result:
print("Discarding unsuccessful RT. Error: ", json.dumps(result, indent=2))
print("Migration completed")