Ошибка AuthenticationContext с MFA AADTS50076

Я использовал Python для получения токена доступа для Dynamics 365 Marketing. Это код, который работал у меня до перехода на новую политику нашей компании, позволяющую включить MFA в учетной записи Microsoft, поэтому нам нужно подтвердить вход с нашего устройства и ввести номер для подтверждения входа с нашего телефона.

import adal                    
auth_context = adal.AuthenticationContext("https://login.microsoftonline.com/common")

token_response = auth_context.acquire_token_with_username_password(https://xxxx.xxx.dynamics.com/", username, password, client_id)

Access_Token = token_response["accessToken"]

Однако, когда я запускаю это сейчас, я получаю сообщение об ошибке "AADSTS50076: Due to a configuration change made by your administrator, or because you moved to a new location, you must use multi-factor authentication to access". Кроме того, у меня нет прав администратора, чтобы что-либо менять на портале Azure, и у меня нет секрета клиента, и нет возможности получить его от ИТ-команды, поскольку они его не предоставляют. Как я могу получить токен доступа в этом сценарии без секрета клиента?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
126
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как упоминалось в этом MS Document,

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

Изначально. Я тоже получил ту же ошибку, когда пытался сгенерировать токен, используя поток паролей имени пользователя для пользователя, у которого включен MFA:

import adal                    
auth_context = adal.AuthenticationContext("https://login.microsoftonline.com/common")

username = "[email protected]"
password = "xxxxxxxx"
client_id = "appId"

try:
    token_response = auth_context.acquire_token_with_username_password("https://xxxxx.xxxxx.crm.dynamics.com/", username, password, client_id)
    access_token = token_response["accessToken"]
    print("Access token acquired successfully:", access_token)
    
except adal.AdalError as e:
    print(e.error_response)

Ответ:

Чтобы устранить ошибку, вам необходимо переключиться либо на интерактивный поток, либо на поток кода устройства, который предполагает, что пользователь хотя бы один раз войдет в систему для завершения MFA.

Чтобы использовать интерактивный процесс для получения токена, вам необходимо добавить URI перенаправления как http://localhost на платформе приложений для мобильных и настольных компьютеров. Поскольку у вас нет доступа к изменению чего-либо на портале, вы можете использовать поток кода устройства.

Вы можете использовать приведенный ниже пример кода Python для получения токена с потоком кода устройства:

import adal

authority_url = "https://login.microsoftonline.com/common"
client_id = "appId"

auth_context = adal.AuthenticationContext(authority_url)

# Initiate device code flow
device_code = auth_context.acquire_user_code("https://xxxx.xxxxx.xxx.dynamics.com/", client_id)
print(device_code['message'])

# Poll for token using device code
token_response = auth_context.acquire_token_with_device_code("https://xxxx.xxxxx.xxx.dynamics.com/", device_code, client_id)

access_token = token_response["accessToken"]
print("Access token acquired successfully:", access_token)

Когда вы запустите пример кода, он отобразит одно сообщение со ссылкой и кодом устройства, например:

При нажатии на ссылку открывается браузер и предлагается ввести код устройства, как показано ниже:

На шаге Next вам будет предложено войти в систему с учетной записью Azure, что включает в себя следующее приглашение MFA:

После успешной аутентификации отобразится экран ниже:

Когда вы сейчас проверите консоль вывода, токен доступа будет успешно сгенерирован следующим образом:

Большое спасибо за этот код. Меня устраивает. Я могу получить токен доступа. Кроме того, будет ли это работать для подключения к SharePoint? Что мне нужно изменить, чтобы читать из списка SharePoint?

samronaldo309 10.05.2024 07:59

Хотите прочитать элементы списка с сайта SharePoint? Вам необходимо сгенерировать токен, изменив область действия на https://yourtenant.sharepoint.com/.default или https://graph.microsoft.com/.default и соответствующим образом предоставить разрешения API.

Sridevi 10.05.2024 08:02

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

Sridevi 10.05.2024 08:03

Вот ссылка на вопрос, аналогичный моей проблеме - stackoverflow.com/questions/78458417/…

samronaldo309 10.05.2024 08:40

@ samronaldo309 Пожалуйста, проверьте добавленный ответ и дайте мне знать, сработал ли он после включения настройки потока общедоступного клиента :)

Sridevi 14.05.2024 03:22

Другие вопросы по теме

Клиенту службы Microsoft Graph не удается ИСПРАВИТЬ пользовательские атрибуты безопасности
Невозможно использовать личную электронную почту с API Graph после установки идентификатора арендатора на «общий»
Создание общего API для доступа к любому BLOB-объекту в любой учетной записи хранения в клиенте
Azure AD B2C — разделение проверки электронной почты и установка пароля на два экрана
Межклиентское хранилище BLOB-объектов Azure SAS завершается сбоем с сообщением «Подпись не соответствует» с использованием UserDelegatedCredential и azure-sdk-for-go
Как получить клиент Microsoft Graph в веб-приложении ASP.NET Core?
В токене Entra ID OpenID, который я получаю при регистрации приложения Azure, что такое утверждение «oid» в результирующем токене доступа и откуда оно берется?
Планирование встреч с использованием Graph API
Управление доступом и разрешениями Azure DevOps с помощью Entra ID
Как области добавляются к токену в Azure Entra ID?