Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
MSAL är inte ett OAuth2-bibliotek på låg nivå. MSAL kapslar in och döljer begreppet uppdateringstoken (RT) för dig. Så om du startade ditt projekt med MSAL Python och följer dess 3-stegs användningsmönster (specifikt steg 2), behöver du inte ens veta och bry dig om var du ska lagra en RT, hur du söker efter den och när du ska uppdatera den. MSAL Python sköter automatiskt allt det tunga arbetet med cachelagring av token åt dig, och slutanvändaren kommer att se ett minimalt antal inloggningsuppmaningar.
Men om ditt befintliga projekt använde andra OAuth2-bibliotek (inklusive men inte begränsat till ADAL-Python) och dina RT lagrades där, och nu vill migrera projektet till MSAL Python, kanske du också vill migrera dessa RT till MSAL-Python så att dina befintliga slutanvändare inte behöver logga in igen.
Från och med MSAL Python 0.6.0 är ett av sätten att göra det att använda MSAL Python för att hämta en ny åtkomsttoken med föregående RT, och när en ny RT kommer tillbaka lagrar MSAL den på vanligt sätt.
Eftersom den här metoden är avsedd för scenarier som inte är typiska är den INTE lättillgänglig med den officiella API-ytan.
Du måste anropa den via en intern hjälp , app.clientoch dess namngivningskonvention skiljer sig också något från de andra officiella API:erna.
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.
Du kan också använda den här metoden för olika integreringsscenarier där du har en uppdateringstoken tillgänglig.
Migrera från ADAL-Python till MSAL Python
Differences
Om du redan känner till Azure AD-slutpunkten för utvecklare (v1.0) (och ADAL Python) kanske du vill läsa Vad är det som skiljer Microsofts identitetsplattforms slutpunkt (v2.0)?.
Omfång, inte resurser
ADAL Python hämtar token för resurser, men MSAL Python hämtar token för omfång. API-ytan i MSAL Python har inte resursparamater längre. Du skulle behöva ange omfång som en lista över strängar som deklarerar önskade behörigheter och resurser som begärs. Välkända scope är Microsoft Graphs scope.
Du kan använda omfångssuffixet /.default för att migrera dina appar från V1.0-slutpunkten (ADAL) till Microsofts identitetsplattform slutpunkten (MSAL). Ett omfångsvärde https://graph.microsoft.com/.default för är till exempel funktionellt detsamma som v1.0-slutpunkterna resource=https://graph.microsoft.com. Även om resursen inte fanns i URL-formuläret, men ett resurs-ID i formuläret resource_id = "XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX", kan du fortfarande använda scope = [ resource_id + "/.default" ].
Referens: