Служба Microsoft Graph API позволяет читать, изменять и управлять практически всеми аспектами Azure AD и Office 365 с использованием одного единственного конечного точка REST API. В этой статье вы узнаете, как преобразовать ваш API в PowerShell Graph API.
Предварительные требования
Если вы хотите идти в ногу со мной в этой статье, убедитесь, что вы соответствуете следующим критериям:
- Запущен Windows PowerShell 5.1 (С этой версией я проводил тестирование. Другие версии могут работать, но не гарантируются)
- Наличие арендатора Azure
- Аутентификация в Azure от учетной записи с глобальными правами администратора или правами регистрации приложения на подписку и наличие глобального администратора для подтверждения запросов на регистрацию вашего приложения.
Создание идентификатора приложения для Microsoft Graph API
Для доступа к Microsoft Graph API вам сначала нужен идентификатор для получения токена OAuth. Это в основном выполняется с использованием идентификатора приложения, который вы можете создать в портале Azure. Вы можете создать идентификатор приложения через портал Azure. Для этого:
- Перейдите в Портал Azure и перейдите в Azure Active Directory.
- Нажмите на Регистрация приложений в разделе Управление в левом меню и нажмите кнопку Новая регистрация.

- Введите имя для вашего приложения и нажмите Зарегистрировать.
- Скопируйте идентификатор приложения (Application Id) для дальнейшего использования.

Создание секретов для Microsoft Graph API
Вы можете аутентифицироваться в Graph API двумя основными методами: AppId/Secret и аутентификация на основе сертификата. Вам потребуется аутентифицироваться при подключении к Graph API с помощью PowerShell.
Давайте рассмотрим, как аутентифицироваться обоими методами.
AppId/Secret
Идентификатор приложения/секрет похожи на обычное имя пользователя/пароль. Идентификатор приложения состоит из GUID вместо имени пользователя, а пароль – это просто случайная строка.
Чтобы создать секрет, щелкните Certificates & secrets в левом меню и нажмите New client secret.

Введите описание для секрета и выберите срок его действия. Теперь просто остается запросить разрешение, чтобы получить доступ к данным, которые вам нужны.
Сертификат
Существует возможность создать самоподписанный сертификат и загрузить его открытый ключ в Azure. Это предпочтительный и более безопасный способ аутентификации.
Сначала вам нужно сгенерировать самоподписанный сертификат. К счастью, это легко сделать с помощью PowerShell.
Теперь загрузите самоподписанный сертификат, который вы экспортировали в $CerOutputPath
в ваше приложение Azure, нажав на Сертификаты и секреты в левом меню и нажав на Загрузить сертификат.

Добавление разрешений для приложения
Предоставление правильных разрешений для приложения важно – не только для функциональности вашего приложения, но и для безопасности. Знание этого и (почти) всего остального в API Microsoft Graph можно найти в документации.
Как только я это настрою, я собираюсь собрать все события безопасности из моего арендатора. Для этого мне нужно иметь разрешение как минимум SecurityEvents.Read.All. С его помощью я могу собирать и принимать меры по событиям невозможного перемещения, пользователи, подключающиеся через VPN/TOR и так далее.
Чтобы добавить SecurityEvents.Read.All к вашему приложению – щелкните API Permissions, а затем Add Permission. Это позволит вам не только получить доступ к Graph API, но и к множеству других приложений в Azure. Большинство из этих приложений легко подключить, как только вы узнаете, как подключиться к Microsoft Graph API.
Нажмите Microsoft Graph > Application Permissions > Security Events и установите флажок SecurityEvents.Read.All. После этого нажмите кнопку Add Permission.
Вы видели, что столбец Admin consent required установлен в значение Yes для этого разрешения? Это означает, что администратор арендатора должен утвердить, прежде чем разрешение будет добавлено к приложению.

Если вы являетесь глобальным администратором, нажмите Grant admin consent for или попросите глобального администратора утвердить его. Запрос разрешения у пользователя вместо администратора, который просто устанавливает разрешение на чтение/запись, является важной частью аутентификации OAuth. Но это позволяет нам обойти это для большинства разрешений в Microsoft Graph.
Вы наверняка уже видели это на Facebook или Google: “Разрешаете ли вы приложению X получить доступ к вашему профилю?”

Теперь вы готовы – давайте войдем и получим некоторые данные!
Получите токен доступа (идентификатор приложения и секрет)
Для этого нам нужно отправить запрос, чтобы получить токен доступа от конечной точки Microsoft Graph OAuth. И в теле этого запроса нам нужно указать:
client_id
– Идентификатор вашего приложения – закодированный URLclient_secret
– Секрет вашего приложения – закодированный URLscope
– URL-кодированный URL, указывающий, к чему вы хотите получить доступgrant_type
– Какой метод аутентификации вы используете
URL для конечной точки: https://login.microsoftonline.com/<tenantname>/oauth2/v2.0/token. Вы можете запросить токен доступа с помощью PowerShell и Graph API, используя следующий фрагмент кода:
Получение токена доступа (использование сертификата)
Аутентификация в Microsoft Graph API с помощью сертификата немного отличается от обычного потока с использованием идентификатора приложения/секрета. Чтобы получить токен доступа с использованием сертификата, вам нужно:
- Создайте заголовок Java Web Token (JWT).
- Создайте полезную нагрузку JWT.
- Подпишите заголовок JWT И полезную нагрузку ранее созданным самоподписанным сертификатом. Это создаст собственный доступный токен, используемый для запроса токена доступа к Microsoft Graph.
- Создайте тело запроса, содержащее:
client_id=<идентификатор приложения>
client_assertion=<JWT>
client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
scope=<URL-кодированный область>
grant_type=client_credentials
- Выполните POST-запрос с телом к конечной точке oauth с
Authorization=<JWT>
в заголовке.
Как это сделать не было очевидно в документации Microsoft, но вот сценарий PowerShell для его выполнения:
Понимание вывода токена запроса
После того как вы получили токен доступа, либо через идентификатор/секрет приложения, либо через сертификат, вы должны увидеть объект с четырьмя свойствами.
token_type
– Тип токенаexpires_in
– Время в секундах, в течение которого токен доступа действителенext_expires_in
– Аналогичноexpires_in
, но для обеспечения надежности в случае сбоя службы токеновaccess_token
– То, за что мы пришли
Затем вы создадите заголовок, используя token_type
и access_token
, и начнете делать запросы с помощью PowerShell к API Microsoft Graph.
Делаем запросы к API Microsoft PowerShell Graph
Теперь начнем делать некоторые запросы к API.
Идем по нашему примеру, сначала вам понадобится URL для отображения предупреждений о безопасности. Не забудьте использовать документацию API Microsoft Graph, чтобы узнать, что нужно.
В этом случае вам понадобится заголовок с Authorization=Bearer <access_token>
и запрос GET к конечной точке предупреждений Graph API. Вот как это сделать с помощью PowerShell.
Теперь, если у вас есть какие-либо предупреждения о безопасности в переменной $SecurityAlerts
, они должны выглядеть примерно так:
Проверка одного оповещения о безопасности в формате JSON будет выглядеть следующим образом:
Понимание и управление разбиением вывода API
У Microsoft Graph API есть ограничение на количество элементов, которое он вернет. Это ограничение действует на каждую функцию, но допустим, это 1000 элементов. Это означает, что вы можете получить максимум 1000 элементов в вашем запросе.
Когда это ограничение достигается, для передачи остальных элементов используется разбиение на страницы. Для этого к ответу на ваш запрос добавляется свойство @odata.nextLink
. @odata.nextLink
содержит URL, по которому можно вызвать следующую страницу вашего запроса.
Вы можете прочитать все элементы, проверив наличие этого свойства и используя цикл:
Вывод
После того, как вы узнали, как аутентифицироваться в Graph API, довольно легко собирать данные из него. Это мощный сервис, который используется гораздо меньше, чем мог бы.
К счастью, уже существует множество модулей для использования Microsoft Graph API, но для удовлетворения собственных потребностей вам может потребоваться создать собственный модуль для этого. Используя навыки, которые вы приобрели в этой статье, вы должны быть на правильном пути.
Для получения дополнительной информации о контроле доступа гостей в Office 365 я написал подробную статью на своем блоге, которую я рекомендую прочитать.