Manipular erros e exceções na MSAL para Python

No MSAL para Python, a maioria dos erros é transmitida como um valor retornado da chamada à API. O erro é representado como um dicionário que contém a resposta JSON do plataforma de identidade da Microsoft.

  • Uma resposta bem-sucedida contém a "access_token" chave. O formato da resposta é definido pelo protocolo OAuth2. Para obter mais informações, consulte 5.1 Resposta bem-sucedida
  • Uma resposta de erro contém "error" e geralmente "error_description". O formato da resposta é definido pelo protocolo OAuth2. Para obter mais informações, consulte 5.2 Error Response

Quando um erro é retornado, a "error" chave contém um código legível por computador. Se for "error" , por exemplo, um "interaction_required", você poderá solicitar que o usuário forneça informações adicionais para concluir o processo de autenticação. Se o "error" estiver "invalid_grant", você pode solicitar que o usuário insira novamente suas credenciais. O snippet a seguir é um exemplo de tratamento de erros na MSAL para 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 um erro é retornado, a "error_description" chave também contém uma mensagem legível por humanos, e normalmente também há uma "error_code" chave que contém um código de erro plataforma de identidade da Microsoft legível pelo computador. Para obter mais informações sobre os vários códigos de erro da plataforma de identidade da Microsoft, consulte Códigos de erro de autenticação e autorização.

Na MSAL para Python, as exceções são raras porque a maioria dos erros é tratada retornando um valor de erro. A ValueError exceção só é gerada quando há um problema com a forma como você está tentando usar a biblioteca, como quando os parâmetros da API são malformados.

Desafios de acesso condicional e declarações

Ao obter tokens silenciosamente, seu aplicativo pode receber mensagens de erro quando um questionamento de declarações de Acesso Condicional, como uma política de MFA, for exigido por uma API que você está tentando acessar.

O padrão para lidar com esse erro é adquirir interativamente um token usando MSAL. Isso solicita ao usuário e oferece a ele a oportunidade de satisfazer a política de Acesso Condicional necessária.

Em determinados casos, ao chamar uma API que exige Acesso Condicional, você pode receber uma solicitação de declarações na mensagem de erro da API. Por exemplo, se a política de Acesso Condicional for ter um dispositivo gerenciado (Intune), o erro será algo como AADSTS53000: seu dispositivo precisa ser gerenciado para acessar esse recurso ou algo semelhante. Nesse caso, você pode passar as declarações na chamada de token de aquisição para que o usuário seja solicitado a atender à política apropriada.

Tentar novamente após erros e exceções

A MSAL faz chamadas HTTP para o serviço Microsoft Entra e, ocasionalmente, podem ocorrer falhas. Por exemplo, a rede pode ficar inoperante ou o servidor está sobrecarregado.

O MSAL Python 1.11+ faz automaticamente uma nova tentativa para você. Você pode personalizar esse comportamento seguindo as http_client instruções de personalização.

HTTP 429

Quando o Servidor de Token de Serviço (STS) é sobrecarregado por solicitações em excesso, ele retorna o erro HTTP 429 com uma indicação de quanto tempo falta para que você possa tentar novamente no campo de resposta Retry-After.

Esperava-se que seu aplicativo limitasse as solicitações subsequentes e apenas repetisse após o período especificado.

A MSAL Python 1.16+ facilita a repetição de uma solicitação de autenticação sob demanda (por exemplo, sempre que o usuário final clica no botão de entrada novamente), a MSAL Python 1.16+ limitaria automaticamente essas tentativas de repetição retornando a mesma resposta de erro de um cache HTTP e apenas enviando uma chamada HTTP real quando essa chamada for tentada após o período especificado.

Por padrão, esse mecanismo de controle de taxa funciona salvando informações de controle de taxa em um cache HTTP em memória integrado. Você pode fornecer seu próprio objeto semelhante a dict como cache HTTP, sobre o qual você pode controlar como persistir seu conteúdo. Consulte a documentação da API de Python MSAL para obter mais detalhes.

Próximas Etapas