Сбой вызова Azure AD Graph для создания пользователя из-за какой-то неясной ошибки

Мне сказали поднять здесь вопрос об Api Azure AD Graph вместо того, чтобы поднимать его как проблему для соответствующего репозитория образцов GitHub, я надеюсь, что группа API Azure Graph отслеживает SO и может помочь нам с проблема с этим примером на github

Дополнительный контекст проблемы:

Мы используем nuget Microsoft.Azure.ActiveDirectory.GraphClient для создания пользователей и управления ими в нашем тестовом клиенте Azure AD. Следуя этому образцу приложения, мы можем создавать и обновлять пользователей в Azure AD через Graph API. Это было нормально до какого-то момента, который произошел около 2-3 дней назад (точный момент неизвестен, мы обнаружили проблему во вторник утром по австралийскому времени. Последний успешный запуск был в пятницу на прошлой неделе). Это был 100% рабочий код, и чтобы убедиться, что это не наш код - я снова просмотрел образец приложения - теперь он тоже сломан. Я тестировал его с последней версией GraphClient v2.1.0 и оригинальной версией примера приложения - v2.0.6.

Чтобы упростить тестирование проблемы, я сделал образец на основе LINQ с некоторыми отредактированными секретами (вы необходимо следовать руководству по образцу консольного приложения, чтобы ввести свои значения, если вы хотите запустить его, вместо исходного образца приложения).

Несколько вещей, на которые следует обратить внимание в захватах скрипта - Azure AD Graph API не возвращает токен обновления вместе с токеном доступа:

{"expires_in":"3599","token_type":"Bearer","scope":"UserProfile.Read",
"expires_on":"1441183928","not_before":"1441180028","resource":"https://graph.windows.net",
"access_token":"TOKEN WAS HERE"}

Я вижу здесь проблему со строкой области видимости, но мы не устанавливаем явную область видимости в GraphClient при вызове токена в соответствии с примером приложения (и раньше этот код был в порядке, как я уже упоминал ранее)

Ответ создания пользователя ясно показывает, что происходит и почему это происходит.

{"odata.error":
    {"code":"Authorization_RequestDenied","message":
        {"lang":"en","value":"Insufficient privileges to complete the operation."}
    }
}

Но неясно, как запрашивать дополнительные области разрешений через любой из этих AuthenticationContext.AcquireToken Перегрузка метода Также странно, что один и тот же код был полностью функциональным раньше и теперь сломан после какого-то таинственного изменения?

Итак, у меня есть несколько вопросов:

  1. Как добавить дополнительные разрешения области в библиотеку GraphClient, чтобы получить токен Graph API с включенной модификацией пользователя. Вероятно, это пластырь для решения проблемы.

  2. Похоже, Azure AD пытается управлять разрешениями для клиентских приложений на портале. Но для приложений типа Native Client дополнительных разрешений нет. Как я могу явно обновить разрешения приложения, чтобы существующий код снова работал. Это вообще возможно ?

  3. Может ли кто-нибудь порекомендовать другие библиотеки для взаимодействия с GraphAPI, которые позволяют потребителю явно указывать область действия запрошенного токена?

================ Обновление ================

Да, я видел документацию о потоке согласия. Преследуя проблему, я создал новый клиент Azure AD, добавил новое приложение и добавил все возможные права, включая все доступные приложения и права делегирования: теперь это выглядит так. Я также

Я могу получить токен с длинным списком областей, например

Directory.AccessAsUser.All Directory.Read Directory.Write User.Read User.ReadWrite User.Read.All User.ReadBasic.All User.ReadWrite.All user_impersonation UserProfile.Read

- сократить несвязанные объемы -

Но он все равно дает мне 403:

{"odata.error":
    {"code":"Authorization_RequestDenied","message":        
        {"lang":"en","value":"Insufficient privileges to complete the operation."}
    }
}

Стоит отметить одну вещь - в списке областей нет Directory.ReadWrite.All.

Но здесь говорится: < strong> Directory.ReadWrite.All: чтение и запись данных каталога.

================ Обновление ================

PS: Некоторая техническая информация для инженеров Azure AD:

  • Запрос-ответ аутентификации имеет идентификатор-запроса-клиента: 88b2bbbd-94cd-498d-a147-caad05e16eb7.
  • Неудачный вызов Graph имеет идентификатор запроса клиента: 882f3918-0ddd-40fe-a558-866997e32b46 только в ответе

person Alexey Shcherbak    schedule 02.09.2015    source источник
comment
Некоторая дополнительная информация - попытался опубликовать область видимости, например scope = xxx, в соответствии со спецификацией oauth2 (4.4.2. Запрос токена доступа). Использование значений области из этого списка msdn.microsoft. com / Library / Azure / Ad / Graph / api / & scope = Directory.ReadWrite. Все возвращают токены с той же областью UserProfile.Read.   -  person Alexey Shcherbak    schedule 02.09.2015
comment
удалось получить токен с множеством разрешений (добавив приложение предварительного просмотра унифицированного API Office 365 в мой веб-клиент и добавив в мое приложение делегирование всех возможных разрешений). По-прежнему не повезло - отправка тех же данных, что и необработанный запрос скрипта, на graph.windows.net/58cc6e97-acd4-43ce-820f-50cfe5fd56e8/ HTTP / 1.1 по-прежнему дает мне 403 с Недостаточными привилегиями для завершения операции. ocp-aad-Diagnostics-имя-сервера: 2 + dALfFSWdN9j1pbjWetFSEVFN5y / lnZw / QCyG + ljYA = идентификатор-запроса: 70f46089-1a05-41d3-85c6-e90e1c0f75dd идентификатор-запроса-клиента: 5dec574-093-ac32fdc-id-запроса: 5dec544-093   -  person Alexey Shcherbak    schedule 02.09.2015


Ответы (1)


Проблема здесь в том, что вы неправильно настроили свое приложение для запроса правильных разрешений для Graph API. Для этого вы должны зайти на портал управления Azure и настроить свои «разрешения для других приложений», чтобы включить области, в которых ваше приложение должно иметь возможность читать / записывать в каталог.

У нас есть документация, которая может вам помочь: https://msdn.microsoft.com/en-us/library/azure/dn132599.aspx (описывает процесс получения согласия) https://msdn.microsoft.com/Library/Azure/Ad/Graph/api/graph-api-permission-scopes (описывает конкретные разрешения, которые API графа показывает, что ваше приложение должно будет запросить)

Надеюсь, это поможет!

person Shawn Tabrizi    schedule 03.09.2015
comment
Немного. см. обновленные сведения - я сделал больше шагов и получил токен с максимально доступными разрешениями - все тот же. - person Alexey Shcherbak; 09.09.2015
comment
Привет Алексей. Просто слежу за этим и извиняюсь, что не вернулся раньше. Что касается примера, вы делаете запрос на доступ только как приложение или как приложение с пользовательским контекстом? В первом случае вы должны установить разрешение на чтение и запись каталога в столбце разрешений приложения. В последнем случае вы должны установить такое же разрешение в столбце делегированных разрешений, И пользователь должен иметь достаточно прав для создания пользователей (например, администратор клиента ИЛИ администратор учетной записи пользователя). Если это не сработает, перешлите утверждения scp вашего декодированного токена JWT, чтобы мы могли увидеть, что они говорят. - person Dan Kershaw - MSFT; 12.11.2015
comment
Привет, Дэн, мы уже перешли от этой проблемы, но я постараюсь вернуться к ней и восстановить среду, чтобы воспроизвести проблему. Я думаю, что простейшим случаем было бы запустить пример - он тоже не работает должным образом для моих клиентов - как для оригинала, так и для недавно созданного. - person Alexey Shcherbak; 13.11.2015