Получение пользователей из MS Graph API с помощью $ фильтра приводит к 403 для некоторых пользователей - PullRequest
0 голосов
/ 14 ноября 2018

У нас есть одностраничное приложение Javascript, которое выполняет вызовы Microsoft Graph API с использованием делегированных разрешений. Он также получает список пользователей через конечную точку / users.

Теперь, когда URL-адрес запроса был https://graph.microsoft.com/v1.0/users?$select=id,displayName,givenName,surname,mail,userPrincipalName, все работало нормально.

Но затем мы изменили его, чтобы включить фильтр. В частности, мы хотим только гостей. Поэтому мы изменили URL запроса на https://graph.microsoft.com/v1.0/users?$filter=userType eq 'Guest'&$select=id,displayName,givenName,surname,mail,userPrincipalName,userType.

Теперь некоторые пользователи получают 403 Запрещено, когда мы пытаемся сделать запрос. Что удивительно, так это то, что они могут получить полный список пользователей, но не могут получить подмножество пользователей.

Этот пользователь сам является гостем и имеет роль каталога Guest Inviter. Это дает им возможность читать всех пользователей. У меня есть учетная запись Global Admin, которая также может использовать второй запрос (было бы довольно ошеломляющим, если бы не мог).

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

Моя теория состоит в том, что у пользователя нет разрешения на доступ к свойству userType, и это вызывает 403. Вероятно, это часть "полного профиля".

Филипп подтвердил это, заявив, что вы не можете получить доступ к этому свойству через область User.ReadBasic.All. Если мы посмотрим на разрешения роли приглашенного гостя: https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#guest-inviter. Мы видим, что у них есть microsoft.aad.directory/users/basic/read, с другой стороны, глобальный администратор имеет microsoft.aad.directory/users/allProperties/allTasks.

Мой вопрос: что мне нужно сделать, чтобы включить этот запрос для пользователя? В этом случае я хотел бы не предоставлять им Global Admin.

Токен приложения имеет следующие области действия:

  • Directory.AccessAsUser.All
  • User.Read

Ранее мы использовали менее привилегированную область видимости, но нам нужно было добавить функции, требующие более высоких привилегий. Область, которую мы имеем, является «наиболее привилегированной» областью для перечисления пользователей: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/user_list.

Приложение также зарегистрировано как приложение Native, если это имеет значение.

Выход и повторный вход (для обновления токена) также не помогают. Эта проблема возникает при новом входе в систему с теми же областями действия в токене. Единственное отличие - это роль пользователя в AAD.

Идентификатор запроса: 6079bcb2-6f90-44cc-8a57-83a8e1676333, отметка времени чт, 15 ноября 2018 г. 06:49:59 GMT.

Ответы [ 3 ]

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

Скорее всего, это происходит, если ваше приложение имеет делегированные разрешения только для https://graph.microsoft.com/User.ReadBasic.All.Только с User.ReadBasic.All ваше приложение не имеет разрешения на чтение свойства userType, что также означает, что у него нет разрешения на фильтрацию по этому свойству.

Возможно, вы найдете любой пользователь в клиенте будет иметь такой же опыт, включая члена или глобального администратора, а не только вашего гостевого пользователя.Если ваше приложение запрашивает User.Read.All, фильтр должен работать так, как ожидается для вашего гостевого пользователя в роли приглашающего гостя.

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

К сожалению, ваша теория на самом деле верна о том, что гостевые пользователи не могут фильтровать по userType. Я только что говорил с командой разработчиков за эту логику на Microsoft Graph. Здесь они ищут исправление, чтобы оно соответствовало нашему управлению доступом на основе ролей (RBAC) для этого свойства, а не логике, предшествующей RBAC, которую он выполняет прямо сейчас. В настоящее время нет временных рамок для этого, они планируют это в свой спринт. Я посмотрю, смогу ли я получить обновление в ближайшие несколько дней.

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

Что вы установили в Azure Active Directory -> Параметры пользователя -> Параметры внешнего сотрудничества -> Разрешения гостевого пользователя ограничены ?

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

...