Процесс аутентификации Получите группу Azure AD, членом которой является пользователь, и выполните логику

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

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

Наконец, мы видим, что вы могли создать OU локально, но читали, что Graph API не распознает его или не может получить его.

Мы пытаемся реализовать логику на этапе SecurityTokenValidated процесса аутентификации, и мы прерываем процесс всякий раз, когда пытаемся использовать:

string UPN = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.Name).Value

Это потому, что мы используем MSAL?


person twc    schedule 14.03.2017    source источник
comment
Я вижу, что вы отметили вопрос [microsoftgraph]. Вы смотрели Microsoft Graph? Что ты пробовал? Что сработало, а что не сработало?   -  person Philippe Signoret    schedule 15.03.2017
comment
Конечно, я использую Microsoft Graph API для многих вещей, почты, календаря и т. Д., Но нам нужна некоторая сегрегация, которую OU обеспечивает в Active Directory, и, как мы заявили, мы можем создать и OU, но не можем получить его с помощью Microsoft График делает это бесполезным - пока мы читаем. Непосредственно отвечая на ваш вопрос, мы не пытались получить группы, членом которых является пользователь, во время процесса аутентификации, потому что мы хотели знать, существует ли какой-либо другой способ получить отдельную группу пользователей в процессе аутентификации.   -  person twc    schedule 15.03.2017
comment
Кроме того, как бы вы сделали запрос к соответствующему пользователю, если этот запрос должен быть выполнен со статусом администратора? Спасибо за уделенное время, Тим:   -  person twc    schedule 15.03.2017
comment
memberOf для вошедшего в систему пользователя не требуются права администратора (только согласие администратора на приложение). Я дам полный ответ через несколько минут.   -  person Philippe Signoret    schedule 15.03.2017


Ответы (1)


Лучшим подходом для вас является использование возможности групповых утверждений Azure AD. (И для получения OU. OU вообще не представлены в Azure AD.)

Сообщение в блоге Душянта Гилла по этому поводу относительно старое, но все еще очень актуально: http://www.dushyantgill.com/blog/2014/12/10/authorization-cloud-applications-using-ad-groups/. Вкратце процесс таков:

  1. Включите групповые заявки для вашего приложения с помощью параметра свойство groupMembershipClaims в вашем приложении. После установки этого параметра, когда пользователь входит в ваше приложение, список групп, членом которых он является, будет включен в токен (если количество групп меньше лимита).
  2. Обновите код авторизации вашего приложения, чтобы использовать утверждения о членстве в группе (если они есть).
  3. Обновите свое приложение, чтобы запросить API Graph Azure AD, если утверждение о членстве в группах отсутствует (т. Е. Если присутствует утверждение о «превышении»). Это происходит только тогда, когда пользователь входит в более чем 150-250 групп. (Используйте утверждения _claim_name и _claim_sources как указание на необходимость прямого вызова Graph API.)

Как описано в документацию для разрешений API Azure AD Graph, чтобы ваше приложение вызывало _ 4_, приложение должно иметь разрешение« Читать все группы »(Groups.Read.All). Для этого разрешения требуется согласие администратора, но как только согласие было предоставлено, запрос может быть выполнен с использованием токена доступа пользователя, выполнившего вход.

person Philippe Signoret    schedule 14.03.2017
comment
Можем ли мы провести различие в группах, например, в Первоначальном обществе? - person twc; 15.03.2017
comment
Я начинаю понимать, что это скорее глобальная проблема --- stackoverflow.com/questions/42747115/, тогда как стандарты x.500, такие как CN и OU, отсутствуют в каталоге Azure. Я добавляю это только для того, чтобы мы могли придумать конкретное решение. - person twc; 15.03.2017
comment
stackoverflow.com/questions/35878421/ - здесь снова пока нет реального решения. - person twc; 15.03.2017
comment
В общем, я бы рекомендовал избегать использования по умолчанию существующих парадигм и шаблонов из локального мира. Я не совсем понял, как это связано со ссылкой из вашего второго комментария. В ссылке из вашего третьего комментария OP просто запрашивает то, чего не существует. - person Philippe Signoret; 16.03.2017
comment
LDAP - это основа для Active Directory, которая долгое время была стандартом и до сих пор остается стандартом. Тем не менее, как видно из моего комментария, можем ли мы сделать группу уникальной? - person twc; 16.03.2017
comment
В настоящее время мы используем MSAL (предварительная версия) - мы можем использовать ADAL, но хотели проверить, правильно ли мы делаем это, поскольку мы прерываем процесс выполнением логики внутри процесса аутентификации SecurityTokenValidated. тогда как это не нарушает процесс использования ADAL. Спасибо, Тим: - person twc; 16.03.2017
comment
Azure AD не поддерживает LDAP (хотя вы можете включить доменные службы Azure AD, если у вас есть приложение с устаревшим кодом). Я не совсем понимаю, можем ли мы сделать группу уникальной. Идентификаторы объектов для каждой группы - это уникальное неизменное значение. - person Philippe Signoret; 16.03.2017
comment
Уникальный или, я бы сказал, параметр по умолчанию - например, SMTP для прокси-адресов, заглавные буквы указывают на Уникальность среди всех SMTP-адресов. - person twc; 17.03.2017
comment
Azure не поддерживает X.500, в котором LDAP используется для более точных запросов, на всякий случай, если это прочтут другие. Возможно, меня можно исправить следующим утверждением: Graph относится к Azure AD, как LDAP - к каталогу X.500. - person twc; 17.03.2017