Исключение при получении токена доступа из Azure Active Directory для гостевого пользователя - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь получить токен доступа Azure Active Directory для гостевого пользователя в Azure Active Tenant. Я могу получить токен доступа для обычного пользователя, созданного в Azure AD, но когда я использую userName (email) и пароль для гостевого пользователя, я получаю исключение:

Accessing_ws_metadata_exchange_failed: Accessing WS metadata exchange failed

Внутреннее исключение:

Response status code does not indicate success: 406 (NotAcceptable).

Код, ответственный за получение токена:

var context = new AuthenticationContext($"{cloud}/{tenant}");
var credentials = new UserPasswordCredential(user, password);
var result = await authenticationContext.AcquireTokenAsync(resource, client, credentials);

Ссылка на MSND: AuhtenticationContext

Я полагаю, что проблема может быть связана не с кодом, а с конфигурацией Azure Active Directory.

Я изменил Azure Active Directory> Пользователи> Настройки пользователей> Настройки внешнего сотрудничества> Разрешения гостевого пользователя ограничены НО, но это не помогло.

Есть предложения?

1 Ответ

0 голосов
/ 08 ноября 2018

Да, используемый вами поток входа не очень хорошо работает с федеративными пользователями (такими как эти Гости). Если вы хотите поддержать их, вам придется переключиться на использование другого потока. Используемый здесь поток грантов ROPC (Resource Owner Password Credentials) действительно предназначен для устаревшего пути обновления, а не для современной аутентификации.

Кстати, этот поток входа также не поддерживает пользователей с многофакторной аутентификацией или паролем с истекшим сроком действия.

В зависимости от типа вашего приложения вы можете выбирать из разных потоков:

  • Код авторизации (внутреннее веб-приложение / собственное приложение)
  • Код устройства (встроенное приложение на устройстве, которое не может отображать веб-представление)

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

В нативных приложениях его можно использовать, показывая пользователю всплывающее окно страницы входа. Может использоваться при разных перегрузках AcquireTokenAsync(). Не используйте тот, который принимает UserPasswordCredential.

Код устройства требует использования двух функций в ADAL: AcquireDeviceCodeAsync и AcquireTokenByDeviceCodeAsync. Вы звоните первому, показываете пользователю возвращенное сообщение, а потом жду второго. Пользователь должен будет открыть браузер, и введите код, указанный в сообщении там. Больше информации об этом потоке: https://joonasw.net/view/device-code-flow

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...