Мне сказали поднять здесь вопрос об 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 с некоторыми отредактированными секретами (вы необходимо следовать руководству по образцу консольного приложения, чтобы ввести свои значения, если вы хотите запустить его, вместо исходного образца приложения).
- запрос-ответ аутентификации (идентификатор-запроса-клиента: 88b2bbbd-94cd-498d-a147-caad05e16eb7)
- Неудачная попытка создания пользователя
Несколько вещей, на которые следует обратить внимание в захватах скрипта - 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 Перегрузка метода Также странно, что один и тот же код был полностью функциональным раньше и теперь сломан после какого-то таинственного изменения?
Итак, у меня есть несколько вопросов:
Как добавить дополнительные разрешения области в библиотеку GraphClient, чтобы получить токен Graph API с включенной модификацией пользователя. Вероятно, это пластырь для решения проблемы.
Похоже, Azure AD пытается управлять разрешениями для клиентских приложений на портале. Но для приложений типа Native Client дополнительных разрешений нет. Как я могу явно обновить разрешения приложения, чтобы существующий код снова работал. Это вообще возможно ?
Может ли кто-нибудь порекомендовать другие библиотеки для взаимодействия с 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 только в ответе