Опитвам се да автоматизирам извличането на AD отчети с помощта на Graph REST API от .net приложение в C#.
Създадох принципал на услугата (с помощта на регистрации на приложения) в новия портал на Azure. Този принципал на услугата има цялата необходима информация, конфигурирана за OAuth 2.0:
- Идентификационен номер на приложение или идентификатор на клиент (автоматично генериран)
- Ключ или клиентска тайна
- Идентификатор на наемател (от ИД на директорията на Azure)
Принципалът на услугата също има разрешения, зададени по подходящ начин за „Microsoft Graph“ като „Четене на данни от директорията“.
Мога да извлека токена с помощта на REST API от .net приложение, но когато се опитвам да използвам този токен в моя код, получавам грешката: „Не мога да проверя достъпа за четене на директория за appId em>".
Моят код за извикване на REST API с помощта на токена е (промених GUID за ID на клиента и т.н.):
var client2 = new RestClient("https://graph.windows.net/a0a00aa0-aaaa-0000-0000-00000e0000aa/reports?api-version=beta");
var request2 = new RestRequest(Method.GET);
request2.AddHeader("cache-control", "no-cache");
request2.AddHeader("authorization", "Bearer " + token);
request2.AddHeader("content-type", "application/json");
IRestResponse response2 = client2.Execute(request2);
Console.WriteLine(response2.Content);
Грешката, която получавам е:
{
"error":{
"code":"Unable to check Directory Read access for appId: 00000aa-aaaa-0a0a-0000-000000000000","message":"message:Unable to check Directory Read access for appId: 00000aa-aaaa-0a0a-0000-000000000000\n client-request-id:00aa0a0a-48bf-4bf8-ae40-a2976a3c6910 timestamp:2017-04-28 01:38:52Z"
}
}
Проверих дали идентификационните данни не са кеширани никъде, както е посочено от някои блогове. Дори стартирах кода от празна виртуална машина и получих същата грешка. Всякакви указания за разрешаване на тази грешка или какво може да я причинява.
АКТУАЛИЗАЦИЯ - 28-4-2017
Разреших това. Знам точните стъпки, които решават това за мен. Но не знам основната концепция. Ако някой може да ми обясни това и как да направя това чрез PowerShell или GUI (дори в 2 реда), ще приема това като отговор. Стъпките, които предприемаме са:
- Създайте принципала на услугата/приложението в Регистрации на приложения
- Добавете разрешение за Windows Azure AD за „Влизане и четене на потребителски профил“ и „Четене на данни от директорията“. Също така добавих разрешения за Microsoft Graph за „Четене на данни от директория“, тъй като също трябва да направя някои повиквания към това.
- Добавете URL адрес за отговор за Postman, т.е. „https://www.getpostman.com/oauth2/callback ".
- Използвайте помощника OAuth 2.0 на Postman, за да извлечете токена. По време на процеса той предоставя екрана по-долу. След като щракна върху Приемам, той генерира токена.
- Сега мога да правя заявки, използвайки C# код.
Какво опитах: Опитах да използвам „Предоставяне на разрешения“ в полето „Необходими разрешения“ в Регистрации на приложения, но това не проработи и доведе до същата грешка.
ВЪПРОС: Искам да разбера какво точно прави диалоговият прозорец по-долу и как мога да направя това чрез GUI или PowerShell.