Fouten en uitzonderingen afhandelen in MSAL voor Python

In MSAL voor Python worden de meeste fouten overgebracht als een retourwaarde van de API-aanroep. De fout wordt weergegeven als een woordenlijst met het JSON-antwoord van de Microsoft identity platform.

  • Een geslaagd antwoord bevat de "access_token" sleutel. De indeling van het antwoord wordt gedefinieerd door het OAuth2-protocol. Zie 5.1 Geslaagde reactie voor meer informatie
  • Een foutantwoord bevat "error" en meestal "error_description". De indeling van het antwoord wordt gedefinieerd door het OAuth2-protocol. Zie 5.2 Foutreactie voor meer informatie

Wanneer er een fout wordt geretourneerd, bevat de "error" sleutel een machineleesbare code. Als dit "error" bijvoorbeeld een "interaction_required"is, kunt u de gebruiker vragen aanvullende informatie op te geven om het verificatieproces te voltooien. Als de "error""invalid_grant" is, kunt u de gebruiker vragen zijn of haar aanmeldgegevens opnieuw in te voeren. Het volgende codefragment is een voorbeeld van foutafhandeling in MSAL voor Python.


from msal import ConfidentialClientApplication

authority_url = "https://login.microsoftonline.com/your_tenant_id"
client_id = "your_client_id"
client_secret = "your_client_secret"
scopes = ["https://graph.microsoft.com/.default"]

app = ConfidentialClientApplication(client_id, authority=authority_url, client_credential=client_secret)

result = app.acquire_token_silent(scopes=scopes, account=None)

if not result:
    result = app.acquire_token_silent(scopes=scopes)

if "access_token" in result:
    print("Access token: %s" % result["access_token"])
else:
    print("Error: %s" % result.get("error"))

Wanneer er een fout wordt geretourneerd, bevat de sleutel "error_description" ook een voor mensen leesbaar bericht, en is er doorgaans ook een sleutel "error_code" die een machineleesbare foutcode van het Microsoft-identiteitsplatform bevat. Zie foutcodes voor verificatie en autorisatie voor meer informatie over de verschillende Microsoft identity platform foutcodes.

In MSAL voor Python zijn uitzonderingen zeldzaam omdat de meeste fouten worden verwerkt door een foutwaarde te retourneren. De ValueError uitzondering wordt alleen gegenereerd wanneer er een probleem is met de wijze waarop u de bibliotheek probeert te gebruiken, bijvoorbeeld wanneer API-parameters onjuist zijn ingedeeld.

Problemen met voorwaardelijke toegang en claims

Wanneer tokens op de achtergrond worden opgehaald, kan uw toepassing fouten krijgen wanneer een claims-uitdaging voor voorwaardelijke toegang, zoals MFA-beleid, wordt vereist door een API waartoe u toegang probeert te krijgen.

Het patroon voor het afhandelen van deze fout is om interactief een token te verkrijgen met BEHULP van MSAL. Hiermee wordt de gebruiker gevraagd en krijgt deze de mogelijkheid om te voldoen aan het vereiste beleid voor voorwaardelijke toegang.

In bepaalde gevallen kunt u, wanneer u een API aanroept waarvoor voorwaardelijke toegang is vereist, een claims-uitdaging ontvangen in de foutmelding van de API. Als het beleid voor voorwaardelijke toegang bijvoorbeeld een beheerd apparaat (Intune) heeft, is de fout ongeveer AADSTS53000: uw apparaat moet worden beheerd voor toegang tot deze resource of iets dergelijks. In dit geval kunt u de claims doorgeven in de aanroep van het acquire-token, zodat de gebruiker wordt gevraagd om te voldoen aan het juiste beleid.

Opnieuw proberen na fouten en uitzonderingen

MSAL maakt HTTP-aanroepen naar de Microsoft Entra-service en af en toe kunnen er fouten optreden. Het netwerk kan bijvoorbeeld uitvalt of de server overbelast is.

MSAL Python 1.11+ voert automatisch één nieuwe poging voor u uit. U kunt dit gedrag aanpassen door de http_client aanpassingsinstructies te volgen.

HTTP 429

Wanneer de Service Token Server (STS) overbelast is met te veel aanvragen, retourneert deze HTTP-fout 429 met een hint over hoe lang het duurt voordat u het opnieuw kunt proberen in het Retry-After antwoordveld.

Uw app zou de volgende aanvragen moeten beperken en pas na de opgegeven periode opnieuw proberen.

MET MSAL Python 1.16+ kunt u eenvoudig een verificatieaanvraag op aanvraag opnieuw proberen (bijvoorbeeld wanneer de eindgebruiker opnieuw op de aanmeldingsknop klikt), worden deze nieuwe pogingen automatisch beperkt door MSAL Python 1.16+ door hetzelfde foutbericht uit een HTTP-cache te retourneren en alleen een echte HTTP-aanroep te verzenden wanneer deze aanroep na de opgegeven periode wordt geprobeerd.

Standaard werkt dit snelheidsbeperkingsmechanisme door informatie over snelheidsbeperking op te slaan in een ingebouwde HTTP-cache in het geheugen. U kunt uw eigen dictobject opgeven als de HTTP-cache, waarmee u kunt bepalen hoe u de inhoud ervan kunt behouden. Zie de documentatie voor MSAL Python API voor meer informatie.

Volgende stappen