Не удается получить displayName для клиента Azure AD

Проблема

Не удается получить displayName для клиента

Что такое?

Мое приложение - это мультитенантный веб-сайт. Я аутентифицирую клиента с помощью Open Id Connect и получаю токен доступа (скажем, armToken) из потока предоставления кода в ordre для выполнения этого запроса:

https://management.azure.com/tenants

Получится список всех арендаторов, у которых заявлен заказчик. Скажем, это Арендаторы.

Это прекрасно работает.

Где что-то пошло не так?

Затем я хочу получить дополнительную информацию обо всех арендаторах, поскольку это отображаемое имя. Поэтому мне нужно выполнить этот запрос для каждого клиента на Tenants:

https://graph.windows.net/[tenantId]/tenantDetails?api-version=1.6

Я использую такой код:

foreach (Tenant tenant in Tenants)
{
   string graphToken = await 
   GetAuthorizationToken("https://graph.windows.net/", tenant.TenantId);
   string json = await GetGraphRequest($"https://graph.windows.net/{tenant.TenantId}/tenantDetails? api-version=1.6", graphToken);

// I parse JSON to get my informations
}

Что я пробовал

Вероятно, проблема заключается в методе GetAuthorizationToken, который не получает правильный токен. Я протестировал все сигнатуры AcquireTokenAsync, ни одна из них не работает, за исключением:

AcquireTokenAsync(string resource, ClientCredential clientCredential);

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

В зависимости от арендатора я получаю несколько сообщений:

{"odata.error": {"code": "Authorization_RequestDenied", "message": {"lang": "en", "value": "Недостаточно прав для завершения операции."}}}

==> Но я дал все возможные разрешения на Microsoft Grant

or

{"odata.error": {"code": "Authorization_IdentityNotFound", "message": {"lang": "en", "value": "Не удалось установить личность вызывающего приложения."} }}

=> фактически у меня нет претензий в качестве OID в токене

  • Я проверил, нет ли в URI проблемы с косой чертой.
  • Я проверил запрос графика с помощью Postman, чтобы убедиться, что это не проблема в коде
  • Я глобальный администратор

Мой вопрос

Я действительно не знаю, что я могу сделать еще.

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

https://github.com/projectkudu/AzureResourceExplorer

Но он не использует библиотеку ADAL. Так, может быть, это ограничение для этой библиотеки?


person Frédéric De Lène Mirouze    schedule 06.08.2017    source источник


Ответы (1)


Если пользователь войдет в ваше приложение с учетной записью azure ad, используя операцию api tenantDetails azure ad graph, вы сможете получить только сведения о клиенте, который выдает токен доступа. В противном случае будет выдана ошибка: Invalid domain name in the request url.

Чтобы получить список всех экземпляров Azure AD, связанных с учетной записью пользователя, вы можете попробовать API управления службами Windows Azure. См. мой ответ здесь. В ответ вы могли получить displayName, domainName, ID арендаторов.

person Nan Yu    schedule 07.08.2017
comment
Я просто получаю AADSTS70002: тело запроса должно содержать следующий параметр: client_secret или client_. Швы не поддерживают предоставление кода. Это удивительно, потому что он отлично работает с порталом. - person Frédéric De Lène Mirouze; 08.08.2017
comment
Если вы зарегистрировали веб-приложение на портале Azure, вам необходимо предоставить секрет клиента во время предоставления кода, щелкните здесь для получения дополнительных сведений. - person Nan Yu; 08.08.2017
comment
Есть обновления? Если у вас есть какие-либо вопросы, пожалуйста, дайте мне знать. - person Nan Yu; 10.08.2017
comment
Я болею несколько дней и не проверял с момента вашего последнего сообщения, извините! - person Frédéric De Lène Mirouze; 10.08.2017
comment
Надеюсь, ты скоро поправишься :) - person Nan Yu; 11.08.2017