Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В MSAL для Python большинство ошибок передаются как возвращаемое значение из вызова API. Ошибка представлена в виде словаря, содержащего ответ 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" также содержит понятное человеку сообщение, и, как правило, также присутствует ключ "error_code", содержащий машиночитаемый код ошибки платформа удостоверений Майкрософт. Дополнительные сведения о различных кодах ошибок платформа удостоверений Майкрософт см. в разделе "Коды ошибок проверки подлинности и авторизации".
В MSAL для Python исключения редки, так как большинство ошибок обрабатываются путем возврата значения ошибки. Исключение ValueError возникает только при возникновении проблемы с тем, как вы пытаетесь использовать библиотеку, например при неправильном изменении параметров API.
Проблемы условного доступа и утверждений
При получении токенов в фоновом режиме приложение может получать ошибки, если API, к которому вы пытаетесь получить доступ, требует запрос утверждений Conditional Access, например политику MFA.
Стандартный способ обработки этой ошибки — интерактивно получить токен с помощью MSAL. Пользователю будет предложено выполнить необходимые действия, чтобы соблюсти требования политики условного доступа.
В некоторых случаях при вызове API, требующего условного доступа, вы можете получить запрос утверждений в сообщении об ошибке API. Например, если политика условного доступа требует, чтобы устройство было управляемым (Intune), ошибка будет примерно такой: AADSTS53000: Ваше устройство должно быть управляемым для доступа к этому ресурсу или аналогичное сообщение. В этом случае можно передать утверждения в вызове получения маркера, чтобы пользователю было предложено выполнить требования соответствующей политики.
Повторная попытка после ошибок и исключений
MSAL выполняет http-вызовы к службе Microsoft Entra и иногда могут возникать сбои. Например, сеть может пойти вниз или сервер перегружен.
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-кэша, при этом вы можете контролировать способ сохранения его содержимого.
Дополнительные сведения см. в документации по API MSAL Python.
Дальнейшие действия
- Рассмотрите возможность включения ведения журнала в MSAL для Python для диагностики и отладки проблем.