Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Microsoft Authentication Library (MSAL) — это комплект средств разработки (SDK), который позволяет приложениям вызывать брокер Microsoft Single Sign-on to Linux — компонент Linux, поставляемый отдельно от дистрибутива Linux, однако устанавливаемый с помощью диспетчера пакетов с использованием sudo apt install microsoft-identity-broker или sudo dnf install microsoft-identity-broker.
Этот компонент выступает в качестве брокера аутентификации, позволяя пользователям вашего приложения использовать интеграцию с учетными записями, известными Linux, например с учетной записью, под которой вы вошли в сеанс Linux, в приложениях, использующих этого брокера.
Брокер также поставляется в составе зависимостей приложений, разработанных Microsoft (например, Корпоративный портал)). Пример установки брокера заключается в том, что компьютер Linux регистрируется в парке устройств компании через решение для управления конечными точками, например Microsoft Intune.
Что такое брокер
Брокер аутентификации — это приложение, работающее на компьютере пользователя и управляющее процессами аутентификации и токенами для подключённых учётных записей. Операционная система Linux использует службу единого входа Microsoft для Linux как брокер аутентификации. Он имеет множество преимуществ для разработчиков и клиентов, включая:
- Включение единого входа: позволяет приложениям упростить проверку подлинности пользователей с помощью Microsoft Entra ID и защитить маркеры обновления Microsoft Entra ID от кражи и неправильного использования.
- Улучшенная безопасность. Многие улучшения безопасности предоставляются брокером без необходимости обновлять логику приложения.
- Поддержка функций. С помощью брокера разработчики могут получить доступ к широким возможностям ОС и служб.
- Интеграция системы. Приложения, использующие подключаемый модуль брокера с встроенным средство выбора учетных записей, позволяют пользователю быстро выбрать существующую учетную запись вместо повторного ввода одинаковых учетных данных.
- Защита токенов. Единый вход Microsoft для Linux гарантирует, что токены обновления привязаны к устройству.
Как подключить использование брокера?
- В библиотеке MSAL Python мы добавили флаг
enable_broker_on_linux, который включает брокер как в WSL, так и в обычных дистрибутивах Linux.- Если ваша цель — включить поддержку брокера исключительно в WSL для Azure CLI, можно изменить код приложения Azure CLI, чтобы активировать
enable_broker_on_wslфлаг исключительно в WSL. - Если вы пишете кроссплатформенное приложение, вам также потребуется использовать
enable_broker_on_windows, как описано в статье Using MSAL Python с веб-диспетчером учетных записей. - Для любого сочетания следующих параметров согласия можно задать значение true:
- Если ваша цель — включить поддержку брокера исключительно в WSL для Azure CLI, можно изменить код приложения Azure CLI, чтобы активировать
| Флажок "Согласие" | Если приложение будет запускаться на | Приложение зарегистрировало это как URI перенаправления для платформы рабочего стола в портале Azure |
|---|---|---|
| включить_брокер_в_windows | Windows 10+ | ms-appx-web://Microsoft. AAD. BrokerPlugin/your_client_id |
| enable_broker_on_wsl | WSL | ms-appx-web://Microsoft. AAD. BrokerPlugin/your_client_id |
| включить_брокер_на_mac | Mac с установленным Корпоративный портал | msauth.com.msauth.unsignedapp://auth |
| enable_broker_on_linux | Linux с установленным Intune |
https://login.microsoftonline.com/common/oauth2/nativeclient (НЕОБХОДИМО включить) |
Приложение должно поддерживать URI перенаправления, относящиеся к брокеру. В
Linuxчастности, URL-адрес для URI перенаправления должен быть следующим:https://login.microsoftonline.com/common/oauth2/nativeclientЧтобы использовать брокер, вам потребуется установить связанные с брокером пакеты в дополнение к базовому пакету MSAL из PyPI:
pip install "msal[broker]>=1.33.0b1,<2"После настройки можно вызвать
acquire_token_interactive, чтобы получить токен.result = app.acquire_token_interactive(["User.ReadBasic.All"], parent_window_handle=app.CONSOLE_WINDOW_HANDLE)
Параметры поддержки брокера
Следующие параметры доступны для настройки поддержки брокера в MSAL Python. Эти параметры можно передать конструктору PublicClientApplication или методу acquire_token_interactive .
| Параметры: | Type | Description |
|---|---|---|
| включить_брокер_в_windows | boolean |
Этот параметр действует только в том случае, если приложение работает на Windows 10+. Этот параметр по умолчанию имеет значение None, что означает, что MSAL не будет использовать брокер. New in MSAL Python 1.25.0. |
| enable_broker_on_wsl | boolean |
Этот параметр действует только в том случае, если приложение работает в WSL. Этот параметр по умолчанию имеет значение None, что означает, что MSAL не будет использовать брокер.
New in MSAL Python 1.25.0. |
| включить_брокер_на_mac | boolean |
Этот параметр действует только в том случае, если приложение запущено на Компьютере Mac с установленным Корпоративный портал. Этот параметр по умолчанию имеет значение None, что означает, что MSAL не будет использовать брокер.
New in MSAL Python 1.31.0. |
| enable_broker_on_linux | boolean |
Этот параметр действует только в том случае, если приложение работает в Linux с установленным Intune. Этот параметр по умолчанию имеет значение None, что означает, что MSAL не будет использовать брокер.
New in MSAL Python 1.33.0. |
| parent_window_handle | int |
ДОПОЛНИТЕЛЬНЫЕ |
Примечания к parent_window_handle
Параметр parent_window_handle требуется, даже если в Linux он не используется. Для приложений с графическим интерфейсом место появления запроса на вход определяется в каждом случае отдельно и в настоящее время не может быть привязано к конкретному окну. В будущем обновлении этот параметр будет использоваться для определения фактического родительского окна.
| Condition | Description |
|---|---|
| Приложение не хочет использовать брокер | не нужно указывать parent_window_handle |
| Приложение выбирает использование брокера | Параметр parent_window_handle обязателен |
| Приложение — это приложение графического интерфейса, работающее в системе Windows или Mac | требуется предоставить его дескриптор окна, чтобы окно входа отображалось в верхней части окна. |
| Приложение — это консольное приложение, работающее в системе Windows или Mac | можно использовать заполнитель PublicClientApplication.CONSOLE_WINDOW_HANDLE |
| Приложение задумано как кроссплатформенное приложение | Приложение должно использовать enable_broker_on_windows, как описано в статье Использование MSAL Python с диспетчером веб-учетных записей. |
Резервное поведение поддержки брокера MSAL Python
MSAL либо завершится с ошибкой, либо незаметно перейдёт к неброкерским потокам.
MSAL будет игнорировать enable_broker_... и обходите брокер в тех потоках аутентификации, которые, как известно, НЕ поддерживаются брокером. К ним относятся ADFS, B2C и т. д. Для других сценариев, в которых можно использовать брокер, см. ниже.
Ошибки MSAL возникают, когда разработчик приложений отказался использовать брокер, но не установлен прямой пакет зависимостей "среднего уровня". Сообщение об ошибке подсказывает разработчику приложения, что нужно указать правильную зависимость msal[broker]. Мы ошибаемся здесь, так как ошибка применима для разработчиков приложений.
MSAL без уведомления «деактивирует» брокер и переключается на режим без брокера, если использование брокера включено, зависимость установлена, но её не удалось инициализировать. Мы предполагаем, что это произойдет на устройстве, если его ОС слишком устарела или базовый компонент брокера по какой-то причине недоступен. Ни разработчик приложения, ни конечный пользователь мало что могут здесь сделать. В конечном итоге политика условного доступа заставит пользователя перейти на другое устройство.
MSAL выдаёт ошибку, когда брокер включён, установлен и инициализирован, но последующие запросы токена завершаются ошибкой.
Important
Если пакеты, связанные с брокером, не установлены, и вы попытаетесь использовать брокер проверки подлинности, вы получите ошибку: ImportError: You need to install dependency by: pip install "msal[broker]>=1.xx,<2"
Note
Параметр parent_window_handle требуется, даже если в Linux он не используется. Для приложений с графическим интерфейсом место появления запроса на вход определяется в каждом случае отдельно и в настоящее время не может быть привязано к конкретному окну. В будущем обновлении этот параметр будет использоваться для определения фактического родительского окна.
Кэширование токенов
Брокер аутентификации управляет кэшированием токенов обновления и доступа. Вам не нужно настраивать настраиваемое кэширование.
Создание примера приложения
Пример приложения, демонстрирующего использование MSAL Python с брокером проверки подлинности в Linux в репозитории MSAL Python GitHub. Пример приложения находится в каталоге samples/console_app и содержит примеры использования брокера для проверки подлинности.
Регистрация приложений
Обновите регистрацию приложения на портале Azure, чтобы включить URI перенаправления для брокера для Linux:
https://login.microsoftonline.com/common/oauth2/nativeclient
Зависимости Linux
Сначала проверьте, установлен ли python3 в дистрибутиве Linux.
python3 --version
Если нет, установите его с помощью диспетчера пакетов для дистрибутива.
Чтобы установить дистрибутив Linux на основе debian/Ubuntu, выполните приведенные далее действия.
sudo add-apt-repository -y universe
sudo apt update
sudo apt install python3 python3-pip libwebkit2gtk-4.1-dev -y
Зависимости Python
Чтобы использовать брокер, вам потребуется установить связанные с брокером пакеты в дополнение к базовому пакету MSAL из PyPI:
pip install "msal[broker]>=1.33.0b1,<2"
Создать проект
После настройки можно вызвать acquire_token_interactive, чтобы получить токен.
import sys # For simplicity, we'll read config file from 1st CLI param sys.argv[1]
import json
import logging
import requests
import msal
# Optional logging
# logging.basicConfig(level=logging.DEBUG)
var_authority = "https://login.microsoftonline.com/common"
var_client_id = "your-client-id-here" # Replace with your app's client ID
var_username = "your-username-here" # Replace with your username, e.g., "
var_scope = ["User.ReadBasic.All"]
# Removed unused variable to avoid confusion
# Create a preferably long-lived app instance which maintains a token cache (Default cache is in memory only).
app = msal.PublicClientApplication(
var_client_id,
authority=var_authority,
enable_broker_on_windows=True,
enable_broker_on_wsl=True
)
# The pattern to acquire a token looks like this.
result = None
# Firstly, check the cache to see if this end user has signed in before
accounts = app.get_accounts(username=var_username)
if accounts:
logging.info("Account(s) exists in cache, probably with token too. Let's try.")
result = app.acquire_token_silent(var_scope, account=accounts[0])
if not result:
logging.info("No suitable token exists in cache. Let's get a new one from AAD.")
result = app.acquire_token_interactive(var_scope,parent_window_handle=app.CONSOLE_WINDOW_HANDLE)
if "access_token" in result:
print("Access token is: %s" % result['access_token'])
else:
print(result.get("error"))
print(result.get("error_description"))
print(result.get("correlation_id")) # You may need this when reporting a bug
if 65001 in result.get("error_codes", []): # Not mean to be coded programatically, but...
# AAD requires user consent for U/P flow
print("Visit this to consent:", app.get_authorization_request_url(config["scope"]))