Azure Graph API, Angular, Get users Groups

Обновить

December 2018

Просмотры

1.4k раз

1

Я хочу , чтобы запросить Azure AD Graph API для получения группы утверждает , для зарегистрированного пользователя от зарегистрированного Azure приложения B2C. Приложение , которое я звоню из является Угловой 5 SPA.

После экспериментов с Azure Active Directory и Адал-angular4, я был успешно извлечения пользователя пользовательских ролей утверждают . Для этого я зарегистрировал Azure приложения AD, набор необходимых областей разрешения, добавил пользовательские роли в манифест приложения, добавление пользователя к приложению, и установить пользовательскую роль для пользователя. Затем я использовал идентификатор приложения моего нового зарегистрированного приложения и арендатора для Адал-angular4 конфигурации. Когда я запрос к конечной точке я получаю маркер, содержащий роли претензии. Это работает хорошо. Когда я изменить роль , которую она показывает в маркере.

Эти роли утверждают, были бы достаточно для меня, но это требует два логинов, один для моего B2C приложения, и один для моего другого зарегистрированного приложения. Я не думаю, что я могу использовать один и тот же маркер для обоих.

Для того , чтобы иметь только один вход, я хочу , чтобы запросить Azure B2C напрямую. Я слышал , что это не дает возможности запрашивать роли пользователя , как Azure Active Directory, и был направлен на использование групп пользователей . Я также видел документы и сказали , что мне нужно использовать Azure Graph API , поскольку Microsoft Graph не реализована возможность запрашивать эту информацию пока.

Я пытался следовать по тому же пути для B2C , который я использовал с AAD. Я создал группу и добавил пользователя в группу. Я пытался получить доступ к информации моего B2C приложения с Azure Graph API конечных https://graph.windows.net/myorganization/users?api-version=1.6 с помощью MSAL.js , но я получаю ошибку «код»: «Authentication_MissingOrMalformed» , Я проверил , что маркер извлекается МГЮА и добавляется к запросу. Когда я изменить URL - адрес на тот , который является недействительным, я получаю ту же ошибку. Я искал и нашел вопросы с той же проблемой здесь , здесь , но никто не ответил

Как исправить эту ошибку?

Нужно ли иметь локальную учетную запись администратора?

Существуют ли какие - либо специальные Прицелы мне нужно установить на моем B2C приложение , чтобы предоставить разрешение на мои вопросы? Если есть, что конкретно они? Я пытался обменивать различные значения для областей в конфигурации МГЮА и ничего , что работает не найдено.

Нужно ли это приложение, чтобы быть несколько жилец?

Я нашел ресурсы на маркеры доступа и областях , но я использую Угловую 5 / машинопись и не имею AD Graph Library Azure Client , которая доступна в .NET. Я не был в состоянии использовать любой ресурс.

2 ответы

1

Я хотел написать это, чтобы помочь другим, кто мог бы быть застрял в одной и той же колее, я был в попытке найти основное направление / понимание. Я по существу пошел с рабочим процессом, которая описывала Pradget @ Крис. Мое первоначальное восприятие этой проблемы было неправильно, хотя и я поясню, где была моя ошибка, и дать немного контекста.

Моя первоначальная цель состояла в том, чтобы принести ролей и / или группы требований пользователя, когда пользователь входит в систему, чтобы мой Azure / Угловая App. Azure не имеет легкий способ сделать это, когда вы входите в с Azure B2C для политики. (В некоторых отношениях, кажется, что Firebase делает это легко).

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

(Всего главы вверх, я имею в виду моего классического Azure AD зарегистрирован приложение в качестве «регистрации приложения» просто провести различие от реализации коды и набор конфигурации в Portal Azure в)

Потребовалось много экспериментов, но я придумал что - то , что , кажется, работает. Я по существу получить 3 лексемы, 2 в угловых используя MSAL.js и один в .NET с использованием Адал для Microsoft Graph. Один в угловому для первоначального входа в систему (loginRedirect вызова МСДТ клиента), получающим id_token , а другой я получить с помощью этого маркера вместе с функцией aquireTokenSlient для получения access_token. Я послал , что мой бэкэнд ядра .NET , где я использовал пользователи идентификатор из входящих маркеров в качестве идентификатора ресурса в запросе на Microsoft Graph , чтобы мои группы утверждают , и тогда я умысел своего собственного маркера JWT с формулой изобретения , чтобы отправить обратно в Угловой для мой маршрут охранники.

Вещи ноты в своем исследовании:

Azure AD Graph против Microsoft Graph , чтобы тянуть группы пользователей: Там в противоречивой информации о том, какие использовать, некоторые говорят , что Microsoft Graph , потому что Azure Graph является устаревшим, но другие говорят , что Azure график , потому что MS Graph не покрывает все основания еще. После экспериментов, я обнаружил , что я был в состоянии вытащить группы пользователя из MS Graph. Учитывая , что и тот факт , что MS Graph новее, я пошел с MS Graph. Для экспериментов с графиками я использовал как Azure Graph исследователь и MS Graph Проводник .

Мне потребовалось некоторое время , чтобы успешно запросить Microsoft Graph, но когда я был через MS Graph Explorer , как указано выше. Основная проблема , которую я впервые столкнулся, когда я опрошена мое приложение с моей учетной записью. Только некоторые запросы работали и даже привез очень ограниченную информацию. Это не было , пока я не перечитываю эту статью о API Azure AD Graph я заметил , что для того , чтобы запросить график, необходимо использовать идентификатор пользователя , который является локальным для вашего домена арендатора и является администратором. Когда я создал и использовал администратора моего арендатора (из этого домена), все запросы работали. Так, насколько мои вопросы выше обеспокоены:

1) Как я могу исправить это [ «код»: «Authentication_MissingOrMalformed»] ошибка? Использование учетной записи локального администратора

2) Нужно ли иметь локальную учетную запись администратора? да

3) Есть ли какие - либо специальные Прицелы мне нужно установить на моем B2C приложение , чтобы предоставить разрешение на мои вопросы? Если есть, что конкретно они? Для запроса MS Graph в пути вы хотите с использованием ADAL Directory.Read доступа

4) Нужно ли это приложение , чтобы быть несколько жилец? нет

Кроме того , в своем исследовании я обнаружил , что вместо того , чтобы использовать B2C группы, вы можете использовать Azure роли AD. В частности, Роли приложений могут быть добавлены в классическом Azure AD приложение манифест в Azure Portal. Это был другой путь , который выглядел перспективным для меня. Я нашел эту статьюописывая, как редактировать манифест для добавления ролей приложения. Сначала добавьте роли в манифест, рядом назначать пользователям роли в Azure Portal, то вы запрашиваете информацию о пользователе (от Angular) с использованием библиотеки ADAL.js. При входе с использованием библиотеки, роль приложения сбита на маркере приобретаемого. Это, конечно, не использует политику B2C. Кроме того, это может пойти, не говоря, но при входе, ни B2C id_token или access_token могут быть использованы для получения учетных данных Классический Azure AD / маркер. Я пытался думать о других способах сделать то, что я хотел. Учитывая, что 2 регистрации в том же жильца я думал, что я мог бы использовать единый вход, чтобы войти в один и оставаться в системе для другого. Я не очень далеко.

Кроме того, когда упоминаются Паджетты @ Крис создания «пользователь API», я неправильно это. К «пользователю апи» Я думал, что он имел в виду моей классический Azure регистрации приложения Ad, который был создан в Azure Portal, дома моей информации о пользователе, а также действует как API, чтобы восстановить свою фишку. Я думал, что первое нужно, чтобы получить маркер доступа от B2C в Угловом и затем использовать этот маркер (до сих пор в Угловом), чтобы получить доступ к моей Azure AD классических регистраций. Оттуда я мог бы стащить информацию моих пользователей, включая роли Application (сделанные доступные от редактирования манифеста). Это не сработало бы, потому что, как я уже сказал выше, я хотел бы сделать это с помощью одного входа в систему, и вы не можете использовать маркер B2C в AD приложение Классический Azure. Даже если он сделал работу, это потребовало бы установки ролей для пользователей в моей классической Azure регистрации AD приложение вне моего B2C приложение, которое я не хотел делать. Имея одну регистрацию приложения для политики, а другой для управления ролями пользователей не очень элегантно. Кроме того, получить его на работу потребуются 2 логинов один для B2C и один для Классического Azure AD. При таком подходе, он чувствует, как эти 2 приложения разделены, и я не хочу делим проблемы через 2 платформ. Так, в конце концов, сценарий входа в систему с B2C в Угловое, а затем нажать на сервер, чтобы тянуть группы пользователей с MS Graph является лучше. Приложение бэкенд нужно только войти в один раз независимо от пользователей доступа к нему, что означает, что пользователи не должны войти дважды. Кроме того, он объединяет мою информацию моей B2C приложение регистрации. Имея одну регистрацию приложения для политики, а другой для управления ролями пользователей не очень элегантно. Кроме того, получить его на работу потребуются 2 логинов один для B2C и один для Классического Azure AD. При таком подходе, он чувствует, как эти 2 приложения разделены, и я не хочу делим проблемы через 2 платформ. Так, в конце концов, сценарий входа в систему с B2C в Угловое, а затем нажать на сервер, чтобы тянуть группы пользователей с MS Graph является лучше. Приложение бэкенд нужно только войти в один раз независимо от пользователей доступа к нему, что означает, что пользователи не должны войти дважды. Кроме того, он объединяет мою информацию моей B2C приложение регистрации. Имея одну регистрацию приложения для политики, а другой для управления ролями пользователей не очень элегантно. Кроме того, получить его на работу потребуются 2 логинов один для B2C и один для Классического Azure AD. При таком подходе, он чувствует, как эти 2 приложения разделены, и я не хочу делим проблемы через 2 платформ. Так, в конце концов, сценарий входа в систему с B2C в Угловое, а затем нажать на сервер, чтобы тянуть группы пользователей с MS Graph является лучше. Приложение бэкенд нужно только войти в один раз независимо от пользователей доступа к нему, что означает, что пользователи не должны войти дважды. Кроме того, он объединяет мою информацию моей B2C приложение регистрации. он чувствует, как эти 2 приложения разделены, и я не хочу делим проблемы через 2 платформ. Так, в конце концов, сценарий входа в систему с B2C в Угловое, а затем нажать на сервер, чтобы тянуть группы пользователей с MS Graph является лучше. Приложение бэкенд нужно только войти в один раз независимо от пользователей доступа к нему, что означает, что пользователи не должны войти дважды. Кроме того, он объединяет мою информацию моей B2C приложение регистрации. он чувствует, как эти 2 приложения разделены, и я не хочу делим проблемы через 2 платформ. Так, в конце концов, сценарий входа в систему с B2C в Угловое, а затем нажать на сервер, чтобы тянуть группы пользователей с MS Graph является лучше. Приложение бэкенд нужно только войти в один раз независимо от пользователей доступа к нему, что означает, что пользователи не должны войти дважды. Кроме того, он объединяет мою информацию моей B2C приложение регистрации.

Я думаю, что Azure может в конечном итоге обеспечить группы и / или роли в их id_tokens в будущем, но я думал, что эта информация может быть полезна для людей, в то же время. Кроме того здесь есть ссылки на другие смежные вопросы, я спросил, что помогли мне направить мои исследования:

Узнав, что мне нужно использовать MSAL.js над ADAL.js для того, чтобы использовать политики B2C.

Аналогичный вопрос я спросил о запросе MS Graph и получить ограниченный ответ

2

Лазурные вопросы B2C AD жетоны с помощью Azure AD v2.0 конечной точки:

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize
https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token

Azure AD Graph API требует маркеров, которые выдаются с помощью Azure AD v1.0 конечной точки:

https://login.microsoftonline.com/{tenant}/oauth2/token

Для приложения одной страницы, чтобы получить доступ к API Azure AD Graph, вы должны соединить их с помощью прокси-API (я называю это API пользователя), как показано ниже.

Во время разработки:

  1. Регистрация приложения одной страницы с помощью Azure AD B2C портал.
  2. Зарегистрируйте API пользователя с помощью AD портала Azure и предоставить данные для чтения каталога разрешения .

Во время выполнения:

  1. Применение одной страницы перенаправляет конечного пользователя к Azure AD B2C v2.0 конечной точки для входа в систему. Azure AD B2C выдает идентификатор маркер, содержащий идентификатор пользователя.
  2. Применение одной страницы вызывает пользователь API с этим ID маркерами. API Пользователь подтверждает идентификатор маркера.
  3. API Пользователь получает маркер доступа от Azure AD v1.0 конечной точки, используя учетные данные приложения, которые были созданы во время разработки в шаге 2.
  4. Пользователь API вызывает API Azure AD Graph, передавая идентификатор пользователя, который был получен на этапе 2, с маркером доступа, который был выдан в шаге 3, запрашивает членство в группе, а затем возвращает их к применению одной страницы.