2016-12-06 1 views
1

Я пытаюсь получить информацию о группах Azure Active Directory с помощью Graph API, но я продолжаю получать ответ «Authorization_RequestDenied».Authorization_RequestDenied при попытке получить группы из Azure Active Directory с помощью Graph API

Этот вопрос аналогичен Insufficient privileges error when trying to fetch signed in user's group membership using Azure AD Graph API, но ответ на этот вопрос не работает для меня.

Вот что я сделал:

  • Записан на Лазурном портале, используя свой аккаунт Microsoft (например [email protected])
  • Настройка Azure экземпляр Active Directory для тестирования. Домен экземпляра является чем-то вроде examplehotmail247.onmicrosoft.com
  • Created пользователя ([email protected])
  • Создано несколько групп, и сделал пользовательскую часть этих групп
  • создали приложение ASP.NET, сконфигурированный для аутентификации на AAD с использованием OpenID Connect ,
  • Зарегистрировано приложение в AAD, создан секрет клиента, URL-адрес ответа и т. Д.
  • Изменен манифест приложения в AAD, чтобы заявки на членство в группе были возвращены.

Часть аутентификации работает нормально. После входа пользователя в систему я вижу всю информацию, которую я ожидаю (имя, идентификатор и т. Д.), А также претензии, содержащие идентификаторы всех групп, к которым принадлежит пользователь.

До сих пор так хорошо.

Теперь я хочу перевести эти идентификаторы групп на имена групп, читаемых человеком. Для этого я использую пакет NuGet Microsoft.Azure.ActiveDirectory.GraphClient, который предоставляет метод GetObjectsByObjectIdsAsync. Этот метод представляется оберткой для метода REST getObjectsByObjectIds.

Чтобы попытаться получить эту работу, я сделал следующее:

  • В Лазурном портале, я получил «Вход и читать профиль» и «Чтение данных каталога» разрешений на мое заявление.
  • Помнить для моего приложения ASP.NET, по крайней мере один раз, используя свой аккаунт Microsoft

Что я вижу: Когда я войти в моем приложении ASP.NET с помощью моей учетной записи Microsoft, все работает. Тем не менее, когда я войти, используя учетную запись AAD я создал ([email protected]), он не со следующей ошибкой:

[DataServiceClientException: {"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"Insufficient privileges to complete the operation."},"requestId":"1234e0bb-3144-4494-a5fb-12a937147bcf","date":"2016-12-06T18:39:13"}}] System.Data.Services.Client.BaseAsyncResult.EndExecute(Object source, String method, IAsyncResult asyncResult) +919 System.Data.Services.Client.QueryResult.EndExecuteQuery(Object source, String method, IAsyncResult asyncResult) +116

Trying эквивалентный запрос с использованием REST API напрямую (т.е. с ASP.NET из картины) дает тот же результат.

Так что же мне здесь не хватает?

Обновление: Я также предоставил приложению следующие делегированные разрешения (в Windows Azure Active Directory): Войдите в систему и прочитайте профиль пользователя, Прочтите данные каталога, Получите доступ к каталогу в качестве пользователя с подпиской. Однако это не имело никакого значения.

Обновление # 2: Я даже сделал [email protected] глобальным администратором экземпляра AAD, и он все равно не помог.

Обновление № 3: Итак, во-первых, некоторые разъяснения. После входа пользователя в систему мое приложение ASP.NET получает код авторизации из потока OpenID Connect. Как только я получу код, я обмениваю его на токен доступа, используя AcquireTokenByAuthorizationCodeAsync. Маркер доступа привязан к пользователю, поэтому я хочу полагаться на делегированные разрешения, а не на разрешения приложений.

+0

Вы пробовали предоставить свои приложения на уровне приложений? Хотя разрешение на чтение каталога данных должно работать, это делегированное разрешение, которое также зависит от разрешенных пользователем прав пользователя. Если пользователь не является администратором, который может привести к тому, что приложение также не сможет получить доступ к данным. Если вы хотите, чтобы приложение имело доступ независимо от пользователя, вы должны предоставить ему разрешения на работу. – juunas

+0

@juunas Пробовал использовать разрешения приложений, но ничего не изменил - такая же ошибка – RobSiklos

+0

'TestMember @ examplehotmail247 @ onmicrosoft.com' Вы имели в виду добавить учетную запись, используя exit ** Microsoft Account **? –

ответ

0

Проблема заключалась в том, что, хотя надлежащие делегированные разрешения были предоставлены моему приложению ASP.NET на портале Azure, у пользователя никогда не было возможности согласиться с ними.

Я начал с создания совершенно новой регистрации приложения в azure для моего приложения ASP.NET, и вот что я нашел: когда пользователь входит в систему в первый раз, им предлагается получить согласие на все делегированные разрешения , Однако, если я изменил, какие делегированные разрешения необходимы после их первого входа в систему, пользователю не будет предложено дать согласие (для новых необходимых разрешений) при следующем входе в систему.

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

+0

Вот новый вопрос: http://stackoverflow.com/q/41023618/270348 – RobSiklos