Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
MSAL может использовать Microsoft Single Sign-on для Linux — компонент для Linux, который поставляется независимо от дистрибутива Linux, однако устанавливается с помощью диспетчера пакетов, используя sudo apt install microsoft-identity-broker или sudo dnf install microsoft-identity-broker.
Этот компонент выступает в качестве брокера аутентификации, позволяя пользователям вашего приложения получать преимущества интеграции с учетными записями, известными Linux, например с учетной записью, с помощью которой вы входите в сеансы Linux в приложениях, использующих этого брокера. Она также упакована как зависимость приложений, разработанных Microsoft, например Корпоративный портал. Эти приложения устанавливаются при регистрации компьютера Linux в парке устройств компании через решение для управления конечными точками, например Microsoft Intune.
Использование брокера аутентификации в Linux позволяет упростить аутентификацию пользователей в вашем приложении через Microsoft Entra ID, а также воспользоваться будущими возможностями, которые защищают маркеры обновления Microsoft Entra ID от кражи и неправомерного использования.
Чтобы включить единый вход (SSO) в вашем приложении WSL с помощью MSAL Python, необходимо убедиться, что хранилище ключей настроено и разблокировано, так как MSAL использует libsecret для взаимодействия с демоном хранилища ключей.
Пример потока проверки подлинности WSL
В ситуации, когда у вас есть приложение WSL, которое должно пройти проверку подлинности с помощью Microsoft Entra ID, поток проверки подлинности для интерактивного запроса будет выглядеть следующим образом:
Обновление до последней версии WSL
Убедитесь, что вы обновились до последнего выпуска WSL. Диалоговое окно управления учетными записями WAM поддерживается в WSL версии 2.4.13 и выше.
# To check what distros are available:
wsl.exe --list --online
wsl.exe --install Ubuntu-22.04
# To check the WSL version:
wsl --version
# To update WSL:
wsl --update
Зависимости пакетов Linux
Установите следующие зависимости на платформе Linux:
-
libsecret-toolsтребуется для интерфейса с цепочкой ключей Linux
Чтобы установить дистрибутив Linux на основе debian/Ubuntu, выполните приведенные далее действия.
sudo add-apt-repository -y universe
sudo apt update
sudo apt install libwebkit2gtk-4.1-dev libsecret-1-0 -y
#from Powershell, run
wsl.exe --shutdown
Important
Чтобы цепочка ключей работала должным образом, необходимо убедиться, что вы 1. установите зависимости, 2. Перезагрузить/перезапустить WSL, 3. Настройте цепочку ключей. Если не выполнить шаги в правильной последовательности, в связке ключей будет отсутствовать параметр «Связка ключей паролей».
Настройте связку ключей в WSL
MSAL использует libsecret в Linux. Требуется взаимодействие с демоном keyring. Пользователи могут использовать Seahorse (приложение GNOME для управления ключами шифрования и паролями) для управления keyring содержимым с помощью графического пользовательского интерфейса (GUI).
В дистрибутивах на основе Debian можно установить пакет, выполнив команду sudo apt install seahorse, а затем следуя этим инструкциям:
Запуск
seahorseв терминале в качестве обычного пользователя (а не как sudo)
В левом верхнем углу выберите + и создайте связку ключей Password.
Создайте связку ключей с именем «login»
Задайте пароль в следующем диалоговом окне.
Запустите
wsl.exe --shutdownиз Терминал Windows.Запустите новый сеанс WSL и запустите пример. У вас будет запрошен пароль от связки ключей.
Запуск примера приложения
Чтобы использовать брокер на платформе Linux, убедитесь, что для BrokerOptions установлено значение OperatingSystems.Linux, как показано в приведённом ниже фрагменте кода:
Сведения о настройке проекта см. в статье Включение единого входа в собственных Linux-приложениях с помощью MSAL Python.
Зависимости Python
Чтобы использовать брокер, вам потребуется установить связанные с брокером пакеты в дополнение к базовому пакету MSAL из PyPI:
pip install "msal[broker]>=1.33.0b1,<2"
Запуск примера приложения
После настройки можно вызвать acquire_token_interactive, чтобы получить токен. Сохраните следующее как wsl_broker.py.
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"]
# 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"]))
Запустите пример
Запустите пример приложения с помощью следующей команды:
python wsl_broker.py
Появится запрос:
- введите имя пользователя и учетные данные
- введите пароль для ввода ключа
- затем приложение получит маркер и распечатает его в консоли.