Gestire errori ed eccezioni in MSAL per Python

In MSAL per Python la maggior parte degli errori viene trasmessa come valore restituito dalla chiamata API. L'errore viene rappresentato come dizionario contenente la risposta JSON del Microsoft Identity Platform.

  • Una risposta con esito positivo contiene la "access_token" chiave . Il formato della risposta è definito dal protocollo OAuth2. Per altre informazioni, vedere 5.1 Risposta riuscita
  • Una risposta di errore contiene "error" e in genere "error_description". Il formato della risposta è definito dal protocollo OAuth2. Per altre informazioni, vedere 5.2 Error Response

Quando viene restituito un errore, la "error" chiave contiene un codice leggibile dal computer. Se il "error" è, ad esempio, un'"interaction_required", puoi chiedere all'utente di fornire ulteriori informazioni per completare il processo di autenticazione. "error" Se è "invalid_grant", è possibile richiedere all'utente di immettere nuovamente le credenziali. Il frammento di codice seguente è un esempio di gestione degli errori in MSAL per 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"))

Quando viene restituito un errore, la "error_description" chiave contiene anche un messaggio leggibile e in genere è presente anche una "error_code" chiave che contiene un codice di errore leggibile dal computer Microsoft Identity Platform. Per altre informazioni sui vari codici di errore Microsoft Identity Platform, vedere Codici di errore di autenticazione e autorizzazione.

In MSAL per Python le eccezioni sono rare perché la maggior parte degli errori viene gestita restituendo un valore di errore. L'eccezione ValueError viene generata solo quando si verifica un problema con il tentativo di usare la libreria, ad esempio quando i parametri API sono in formato non valido.

Problemi di Accesso Condizionale e delle attestazioni

Quando si ricevono i token in modo invisibile all'utente, l'applicazione potrebbe ricevere errori quando una richiesta di attestazioni di accesso condizionale , ad esempio i criteri di autenticazione a più fattori, è richiesta da un'API a cui si sta provando ad accedere.

Il modello per la gestione di questo errore consiste nell'acquisire in modo interattivo un token tramite MSAL. Questo sollecita l'utente e gli offre l'opportunità di soddisfare i requisiti necessari dei criteri di Accesso condizionale.

In alcuni casi, quando si effettua una chiamata a un'API che richiede l'accesso condizionale, è possibile ricevere una richiesta di attestazioni nel messaggio di errore restituito dall'API. Ad esempio, se i criteri di accesso condizionale devono avere un dispositivo gestito (Intune), l'errore sarà simile a AADSTS53000: il dispositivo deve essere gestito per accedere a questa risorsa o qualcosa di simile. In questo caso, è possibile passare i claim nella chiamata di acquisizione del token affinché all'utente venga richiesto di soddisfare il criterio appropriato.

Ripetizione di tentativi dopo errori ed eccezioni

MSAL effettua chiamate HTTP al servizio Microsoft Entra e occasionalmente possono verificarsi errori. Ad esempio, la rete può scendere o il server è sovraccarico.

MSAL Python 1.11+ esegue automaticamente un nuovo tentativo. È possibile personalizzare questo comportamento seguendo le istruzioni di http_client personalizzazione.

HTTP 429

Quando il server dei token di servizio (STS) è sovraccarico a causa di un numero eccessivo di richieste, restituisce l'errore HTTP 429 con un'indicazione del tempo da attendere prima di poter riprovare nel campo di risposta Retry-After.

L'app avrebbe dovuto limitare la frequenza delle richieste successive e ripetere il tentativo solo dopo l'intervallo specificato.

MSAL Python 1.16+ semplifica la ripetizione di una richiesta di autenticazione su richiesta (ad esempio, ogni volta che l'utente finale fa di nuovo clic sul pulsante di accesso), MSAL Python 1.16+ limita automaticamente i tentativi restituendo la stessa risposta di errore da una cache HTTP e inviando solo una chiamata HTTP reale quando la chiamata viene tentata dopo il periodo specificato.

Per impostazione predefinita, questo meccanismo di throttling funziona memorizzando le informazioni di throttling in una cache HTTP in memoria integrata. Puoi fornire un oggetto personalizzato simile a dict come cache HTTP, di cui puoi controllare come persistirne il contenuto. Per altri dettagli, vedere la documentazione dell'API msal Python.

Passaggi successivi