ADAL–MSAL migrálási útmutató Python

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")