Python 대한 MSAL의 오류 및 예외 처리

msAL for Python 대부분의 오류는 API 호출의 반환 값으로 전달됩니다. 이 오류는 Microsoft ID 플랫폼 JSON 응답을 포함하는 사전으로 표시됩니다.

  • 성공적인 응답에는 키가 포함됩니다 "access_token" . 응답 형식은 OAuth2 프로토콜에 의해 정의됩니다. 자세한 내용은 5.1 성공적인 응답을 참조하세요.
  • 오류 응답에는 일반적으로 "error".가 포함됩니다"error_description". 응답 형식은 OAuth2 프로토콜에 의해 정의됩니다. 자세한 내용은 5.2 오류 응답을 참조하세요.

오류가 반환되면 키에는 "error" 컴퓨터에서 읽을 수 있는 코드가 포함됩니다. "error" 예를 들어 "interaction_required"이 경우 인증 프로세스를 완료하기 위해 추가 정보를 제공하도록 사용자에게 메시지를 표시할 수 있습니다. 이 "error""invalid_grant"경우 사용자에게 자격 증명을 다시 입력하라는 메시지를 표시할 수 있습니다. 다음 코드 조각은 msAL에서 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"))

오류가 반환 "error_description" 되면 키에는 사람이 읽을 수 있는 메시지도 포함되며 일반적으로 컴퓨터에서 읽을 수 있는 Microsoft ID 플랫폼 오류 코드가 포함된 키도 "error_code" 있습니다. 다양한 Microsoft ID 플랫폼 오류 코드에 대한 자세한 내용은 인증 및 권한 부여 오류 코드를 참조하세요.

Python MSAL에서는 대부분의 오류가 오류 값을 반환하여 처리되기 때문에 예외가 드물게 발생합니다. ValueError API 매개 변수의 형식이 잘못된 경우와 같이 라이브러리를 사용하려는 방법에 문제가 있는 경우에만 예외가 throw됩니다.

조건부 액세스 및 클레임 문제

토큰을 자동으로 가져오는 경우 액세스하려는 API에서 MFA 정책과 같은 조건부 액세스 클레임 챌린지 가 필요한 경우 애플리케이션에 오류가 발생할 수 있습니다.

이 오류를 처리하는 패턴은 MSAL을 사용하여 토큰을 대화형으로 획득하는 것입니다. 이렇게 하면 사용자에게 프롬프트가 표시되고 필요한 조건부 액세스 정책을 충족할 수 있는 기회가 표시됩니다.

조건부 액세스가 필요한 API를 호출하는 경우 API의 오류에서 클레임 챌린지를 받을 수 있습니다. 예를 들어 조건부 액세스 정책에 관리 디바이스(Intune)가 있는 경우 오류 는 AADSTS53000 같은 것입니다. 이 리소스에 액세스하려면 디바이스를 관리해야 합니다. 이 경우 사용자에게 적절한 정책을 충족하라는 메시지가 표시되도록 토큰 획득 호출에서 클레임을 전달할 수 있습니다.

오류 및 예외 후 다시 시도

MSAL은 Microsoft Entra 서비스에 대한 HTTP 호출을 수행하며 경우에 따라 오류가 발생할 수 있습니다. 예를 들어 네트워크가 다운되거나 서버가 오버로드될 수 있습니다.

MSAL Python 1.11 이상에서는 자동으로 한 번의 재시도를 수행합니다. 사용자 지정 지침에 따라 이 동작 http_client 사용자 지정할 수 있습니다.

HTTP 429

STS(서비스 토큰 서버)가 너무 많은 요청으로 오버로드되면 응답 필드에서 다시 시도할 수 있을 때까지의 기간에 대한 힌트와 함께 HTTP 오류 429를 Retry-After 반환합니다.

앱은 후속 요청을 스로틀링하고, 지정된 시간이 지난 후에만 다시 시도할 것으로 예상되었습니다.

MSAL Python 1.16 이상에서는 요청 시 인증 요청을 쉽게 다시 시도할 수 있습니다(예: 최종 사용자가 로그인 단추를 다시 클릭할 때마다) MSAL Python 1.16 이상에서는 HTTP 캐시에서 동일한 오류 응답을 반환하고 지정된 기간 후에 해당 호출을 시도할 때만 실제 HTTP 호출을 전송하여 이러한 재시도를 자동으로 제한합니다.

기본적으로 이 스로틀 메커니즘은 스로틀 정보를 기본 제공 메모리 내 HTTP 캐시에 저장하여 작동합니다. 콘텐츠를 유지하는 방법을 제어할 수 있는 고유한 dict유사 개체를 HTTP 캐시로 제공할 수 있습니다. 자세한 내용은 MSAL Python API 설명서를 참조하세요.

다음 단계

  • 문제를 진단하고 디버그하는 데 도움이 되도록 Python MSAL에서 로깅을 사용하도록 설정하는 것이 좋습니다.