#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): идентификатор арендатора, отображаемое имя арендатора и подтвержденные домены «.
Однако по-прежнему не объясняет, почему обозреватель графиков может его прочитать.