Использование MSAL Python с диспетчером веб-учетных записей

Если вы создаете приложение Windows, вы можете упростить проверку подлинности пользователей с помощью брокера проверки подлинности. Диспетчер веб-учетных записей (WAM) — это брокер проверки подлинности, который работает с MSAL Python. WAM доступен только в Windows 10 и более поздних версиях, а также Windows Server 2019 и более поздних версиях.

Дополнительные сведения о преимуществах использования брокера аутентификации см. в разделе Что такое брокер документации MSAL.NET.

Usage

Чтобы использовать брокер, вам потребуется установить связанные с брокером пакеты в дополнение к базовому пакету MSAL из PyPI:

pip install msal[broker]>=1.20,<2

Если пакеты, связанные с брокером, не установлены и вы пытаетесь использовать брокер проверки подлинности, вы получите ошибку ImportError: необходимо установить зависимость по: pip install "msal[broker]>=1.20,2<".

Затем создайте новый экземпляр PublicClientApplication и задайте для enable_broker_on_windows значение True. Это гарантирует, что MSAL попытается взаимодействовать с WAM вместо открытия нового окна браузера. Если вы пишете кроссплатформенное приложение, вам также потребуется использовать enable_broker_on_mac, как описано в статье "Использование MSAL Python с брокером проверки подлинности в macOS".

from msal import PublicClientApplication

app = PublicClientApplication(
    "CLIENT_ID",
    authority="https://login.microsoftonline.com/common",
    enable_broker_on_windows=True)

Теперь можно получить маркер, вызвав acquire_token_interactive и указав дескриптор родительского окна с помощью parent_window_handle:

result = app.acquire_token_interactive(["User.ReadBasic.All"],
         parent_window_handle=app.CONSOLE_WINDOW_HANDLE)

Маркер родительского окна необходим WAM, чтобы убедиться, что диалоговое окно отображается правильно в верхней части окна запроса. MSAL не делает этого вывода напрямую, поскольку на то, к какому окну должен быть привязан WAM, может влиять множество факторов, и именно разработчики приложений лучше всего могут решить, каким должно быть это окно.

Для консольных приложений MSAL упрощает задачу, предлагая готовое решение для получения дескриптора окна терминала — CONSOLE_WINDOW_HANDLE. Для настольных приложений может потребоваться дополнительная работа с API Windows, чтобы получить дескриптор окна. Вспомогательные пакеты, такие как pywin32 , могут помочь с вызовами API.

Перед запуском приложения убедитесь, что настроили URL-адрес перенаправления для настольного приложения:

Чтобы использовать брокер Windows, приложение должно иметь правильный URL-адрес перенаправления, настроенный в портал Azure, в форме:

ms-appx-web://microsoft.aad.brokerplugin/YOUR_CLIENT_ID

Если URL-адрес перенаправления не настроен, вы получите ошибку broker_error, примерно такого вида, как (pii). Статус: Response_Status.Status_ApiContractViolation, код ошибки: 3399614473, тег: 557973642.

Если настройка и создание экземпляра были выполнены правильно, то после запуска приложения вы увидите, что брокер аутентификации вступит в работу и позволит пользователю выбрать учетную запись, которую он хочет использовать для аутентификации.

Пример вызова WAM из Python

Следует отметить, что если вы перейдете на использование проверки подлинности через брокер, то, если пользователь ранее вошел в систему и состояние входа по-прежнему действительно, вызов acquire_token_interactive по-прежнему приведет к тихой попытке получить токен, и запрос будет показан только при необходимости. Если вы предпочитаете всегда запрашивать запрос, можно использовать этот необязательный параметр prompt="select_account".

Различия между опытом брокера

В зависимости от центра сертификации, указанного при создании экземпляра PublicClientApplication, пользовательский интерфейс брокера может отличаться.

/Потребителей

Используется для аутентификации только с личными учетными записями Microsoft.

Пользовательский интерфейс WAM для потребителей

/Общие

Используется для проверки подлинности с помощью личных Microsoft учетных записей, а также рабочих и учебных учетных записей.

Пользовательский интерфейс WAM для личных и рабочих учетных записей

/Организаций

Используется только для аутентификации с рабочими и учебными учетными записями.

Пользовательский интерфейс WAM только для рабочих учетных записей

Если login_hint предоставлен, но учетная запись еще не зарегистрирована в WAM, то указание будет автоматически заполнено в поле "Электронная почта" или "Телефон ".

/TENANT_ID

Используется для аутентификации только рабочих и учебных учетных записей в пределах указанного тенанта.

Пользовательский интерфейс WAM для учетных записей, относящихся к клиенту

Если login_hint предоставлен, но учетная запись еще не зарегистрирована в WAM, то указание будет автоматически заполнено в поле "Электронная почта" или "Телефон ".