Как настроить разрешения Azure AD для доступа к Microsoft Graph из приложения консоли WebJob?

Я не могу получить доступ к Microsoft Graph внутри WebJob (в основном консольное приложение). Я получаю сообщение об ошибке «Недостаточно прав для завершения операции», когда пытаюсь получить пользователей из AD.

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

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

Вот код:

var pages = activeDirectoryClient.Users.Where(adItem => adItem.Mail == o.Email).ExecuteAsync().Result;


var activeDirectoryClient = new ActiveDirectoryClient(serviceRoot, async () => await GetTokenAsync(authContext, azureAdParameters.UserObjectId, azureAdParameters.HostUrl));

ActiveDirectoryClient используется для получения данных пользователей, но он исходит из Microsoft.Azure.ActiveDirectory.GraphClient. Нужны ли ему разрешения Microsoft Graph API или разрешения Azure AD Graph API?

Спасибо


person John Constantine    schedule 21.06.2019    source источник


Ответы (2)


WebJob - это не публичный клиент - это конфиденциальный клиент. Нет пользователя для аутентификации, когда ему нужно получить токены, и он знает, как защитить секреты (это определение конфиденциального клиента). Он должен пройти аутентификацию самостоятельно. Вам необходимо предоставить ему соответствующие разрешения для приложения (User.Read.All - это делегированное разрешение - оно не сработает), и, если необходимо, администратор должен дать на них согласие. и используйте метод AcquireToken, который использует ClientCredentials (идентификатор приложения и симметричный ключ или, лучше, сертификат X509).

person Marc    schedule 21.06.2019
comment
Звучит разумно и ясно. Спасибо, попробую. Также собирался спросить о опции согласия администратора - технически это просто галочка для подписания разрешения как доверенного, или для этого требуется дополнительный вызов API, как я видел в реализации собственных вызовов - первый HTTP-вызов для подтверждения согласия и второй для получения токен? Пока - я получаю токен с помощью context.AcquireTokenAsync (GraphResourceId, clientCredentials). Он получает это правильно, просто терпит неудачу, когда я пытаюсь получить пользователей из AD с вышеупомянутым исключением, которое выглядит как проблема с разрешением, о которой вы упомянули. - person John Constantine; 24.06.2019
comment
Администратор может предоставить согласие через портал Azure. В качестве альтернативы в этой статье объясняется, как получить согласие на использование API с помощью ссылки для входа: docs.microsoft.com/en-us/skype-sdk/trusted-application-api/docs/ (замените клиент и ответьте uri на ваши данные). Вам нужен администратор, чтобы использовать эту ссылку для входа и предоставления согласия. - person Marc; 24.06.2019
comment
Спасибо. Все (почти) заработало. Пришлось сменить клиента, по ошибке это был Azure AD Graph Client вместо MS Graph Service Client. Таким образом, с предоставленными разрешениями он подключается и выбирает пользователя. Только с одной проблемой почти вся информация пуста, но должна содержать, например, адрес .. теперь у меня есть только контактный номер телефона и адрес электронной почты, имя, фамилия .. Может ли он быть связан с каким-либо другим разрешением или есть другие данные при загрузке через MS Graph и Azure AD Graph? Спасибо - person John Constantine; 12.07.2019

Похоже, при регистрации вашего старого веб-приложения отсутствуют необходимые разрешения для приложения. Итак, мой совет:

  1. Зарегистрируйте новое приложение в Azure AD;
  2. Дайте ему разрешения Microsoft Graph API (приложение): User.Read.All и Directory.Read.All;
  3. Сгенерировать новый секрет клиента для регистрации нового приложения;
  4. Измените настройку веб-задания на использование нового идентификатора и секрета клиента приложения.

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

person aidden    schedule 21.06.2019
comment
Спасибо. Все (почти) заработало. Пришлось сменить клиента, по ошибке это был Azure AD Graph Client вместо MS Graph Service Client. Таким образом, с предоставленными разрешениями он подключается и выбирает пользователя. Только с одной проблемой почти вся информация пуста, но должна содержать, например, адрес .. теперь у меня есть только контактный номер телефона и адрес электронной почты, имя, фамилия .. Может ли он быть связан с каким-либо другим разрешением или есть другие данные при загрузке через MS Graph и Azure AD Graph? Спасибо - person John Constantine; 12.07.2019