Azure AD ПОЛУЧАЕТ TenantDetails

#azure #azure-active-directory

#azure #azure-active-directory

Вопрос:

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

Однако я заметил, что при входе в систему с использованием обычного пользователя, не являющегося администратором, код countryLetterCode возвращается как null. Если я выполняю вход с использованием администратора, возвращается значение.

Если я выполню те же шаги через обозреватель графиков graphexplorer.cloudapp.net код страны возвращается в обоих случаях — как для пользователей с правами администратора, так и для пользователей, не являющихся администраторами.

Есть идеи

Спасибо

Донал

Ответ №1:

Я использую Azure Graph client (C #) для получения кода страны, он работает как для обычного пользователя, так и для администратора. Вот код для справки:

 string graphResourceId = "https://graph.windows.net";

Uri servicePointUri = new Uri(graphResourceId);
Uri serviceRoot = new Uri(servicePointUri, tenantId);

ActiveDirectoryClient client = new ActiveDirectoryClient(serviceRoot, async () => await Task.FromResult(accessToken));

Console.WriteLine(client.TenantDetails.ExecuteAsync().Result.CurrentPage.First().CountryLetterCode);
  

Какой язык вы разрабатывали? Не могли бы вы поделиться кодом, который вы разрабатывали?

И поскольку Azure Graph REST может работать хорошо, я также предлагаю вам использовать REST API в качестве обходного пути.

Обновить

Основываясь на тесте, если я удалю разрешение Directory.Read.All на портале, обычный пользователь не сможет получить код страны, как вы описали. Пожалуйста, проверьте это разрешение на портале, чтобы узнать, полезно ли оно.

Комментарии:

1. Привет @Fei Xue — MSFT,

2. Привет @Fei Xue — MSFT, вы используете свой код как веб-приложение или собственное приложение. Также, какие разрешения вы предоставили своему приложению и согласны ли они с администратором.

3. @DonalMcWeeney Я разрабатываю собственное приложение, но эта проблема не должна зависеть от типа приложения, поскольку мы можем напрямую вызывать Azure Graph REST. Я обновляю исходное сообщение, пожалуйста, проверьте, полезно ли оно.

4. Я также нашел следующую ссылку link , где они изменили поведение, чтобы теперь по-разному относиться к веб-приложениям и собственным приложениям в отношении разрешения на чтение каталога! Спасибо…

5. Кажется, есть какое-то недоразумение. Я имею в виду, что тип приложения не влияет на описанное вами поведение, так это то, что для запроса REST требуется только токен. Независимо от того, какой токен выдан для веб-приложения или собственного приложения, это не повлияет на ответ REST. Возможной причиной, влияющей на результат, является утверждение в маркере, например, область / роли и тип пользователя (обычный или администратор). Предоставленная вами ссылка описывает другое поведение согласия на получение токена. Была ли проблема устранена после проверки Directory.Read.All ?

Ответ №2:

Похоже, что пользователь, не являющийся администратором, может вызвать TenantDetails и получить обратно только основную информацию…

Из ссылки на разрешения для User.Read/»Вход и чтение профиля пользователя» — «Также позволяет приложению считывать следующие основные сведения о компании вошедшего в систему пользователя (через объект TenantDetail): идентификатор арендатора, отображаемое имя арендатора и подтвержденные домены «.

Однако по-прежнему не объясняет, почему обозреватель графиков может его прочитать.