Не так давно я работал над проектом, в котором мы использовали Microsoft Graph API для выполнения некоторых задач. Пока что ничего особенного, так как в наши дни вызывать REST API - это не ракетостроение, это просто вызов простого скрипта. Чтобы добавить в этот сценарий что-то более интересное, нам нужно было вызвать эту функциональность из Microsoft Flow (это было бы то же самое, используя аналогичные продукты, такие как IFTTT или Zapier, в основном у нас был рабочий процесс, который должен выполнять определенную функциональность. ). Исходя из этого, наш код должен был запускаться изнутри инструмента рабочего процесса, и самым простым решением здесь было вызвать веб-конечную точку, которая его выполняет (это одно из наиболее распространенных действий во всех инструментах рабочего процесса).

Вдобавок мы знали, что потребности рабочего процесса со временем могут сильно измениться. Его можно интенсивно использовать время от времени (например, случайное число из 1000 запросов менее чем за минуту), а затем его нельзя будет вызывать снова в течение недель или месяцев. Здесь Функции Azure демонстрируют свои преимущества, поскольку они могут масштабироваться по мере необходимости и будут стоить вам только тогда, когда они используются, в то время как, если бы мы выбрали использование веб-приложения, нам пришлось бы платить по крайней мере за один экземпляр каждый месяц независимо от использовалось оно или нет.

Вызов API Microsoft Graph

Итак, первым шагом к работе над этим было локальное разрешение сценария (без инструмента рабочего процесса или Azure). По сути, нам нужно сначала решить саму функциональность, и для этого мы разрабатываем скрипт node.js, который использует запрос для вызова Microsoft Graph API для групп для создания новой группы безопасности (группа без списка рассылки, которая используется для управления доступом пользователей к внутренним ресурсам приложения).

В следующем коде показано, как API используется из этого сценария. Обратите внимание, что токен и имя передаются параметром. Кроме того, эта функция возвращает Обещание, которое успешно разрешено, если группа правильно создана, и отклонено, если это не так.

Аутентификация API

Чтобы вызвать Microsoft Graph API, нам нужно было пройти аутентификацию, и поэтому в предыдущем разделе у нас есть токен в качестве параметра функции, которая использовалась для выполнения запроса. Чтобы получить этот токен, сначала нам нужно зарегистрировать новое веб-приложение в Office 365 Azure Active Directory. Ниже приведены шаги, которые вам понадобятся для его регистрации.

  1. Войдите на портал Azure через портал администрирования Office 365, выбрав сайт администрирования Azure AD.
  2. На левой навигационной панели выберите Дополнительные службы, нажмите Регистрация приложений, а затем нажмите Добавить.
  3. Следуйте инструкциям и создайте новое приложение.
  4. Выберите Веб-приложение / API в качестве Типа приложения.
  5. Укажите любой URI перенаправления (например, https: // GraphAPI), поскольку он не имеет отношения к этому приложению.
  6. Приложение появится в списке приложений. Щелкните его, чтобы получить идентификатор приложения (также известный как идентификатор клиента). Скопируйте его, как вам понадобится, в коде функции Azure.
  7. В меню настроек нажмите Ключи и добавьте новый ключ (также известный как секрет клиента). Кроме того, скопируйте его для использования в коде функции Azure.

После того, как у нас есть зарегистрированные приложения вместе с идентификатором и секретом клиента, мы должны добавить следующий код для генерации токена. Обратите внимание, что мы используем adal пакет npm, чтобы сделать это проще, вызывая метод acceptTokenWithClientCredentials объекта AuthenticationContext. Кроме того, у нас есть некоторые константы, которые необходимо обновить с помощью идентификатора клиента и секрета, полученных ранее, а также имени клиента.

Итак, сложив все вместе, вы получите примерно следующее.

Разрешения

Если вы попытаетесь запустить код, который у вас есть до сих пор, вы получите ошибку, потому что группа не будет правильно создана, поскольку зарегистрированное приложение не имеет необходимых разрешений.

Для каждого вызова API Graph вам потребуется другой набор разрешений, в этом конкретном случае вам нужно будет предоставить приложению, созданному ранее на портале Azure, разрешение Group.ReadWrite.All (подробнее о Конечная точка создания группы здесь). Следующие шаги описывают, как настроить разрешения для вашего приложения.

  1. В меню Регистрация приложений на портале Azure выберите свое приложение.
  2. В меню Настройки нажмите Необходимые разрешения.
  3. В меню Необходимые разрешения нажмите Microsoft Graph (или добавьте его, если его еще нет в списке).
  4. В меню Разрешить доступ выберите Чтение и запись всех групп в разрешения организации в разделе Разрешения приложения и нажмите Сохранить .
  5. Наконец, вернитесь в меню Требуемые разрешения и нажмите кнопку Предоставить разрешения.

Функция Azure

Теперь, когда у нас есть готовый код node.js, нам нужно немного обновить его, чтобы использовать его из функции Azure. По сути, поскольку мы собираемся использовать триггер HTTP, нам нужно обновить код, чтобы получить имя новой группы в качестве параметра в строке запроса. Кроме того, нам может потребоваться вернуть что-то вроде результата вместо того, чтобы просто отображать его в журнале. Кроме того, мы должны заменить объект console на context для ведения журнала и добавить вызов context.done (), чтобы отметить, что функция завершила выполнение .

Следующий код показывает, как он завершается со всеми необходимыми изменениями.

Обратите внимание, что мы заменили console на context для ведения журнала, как указано ранее, а также добавили необходимые вызовы к done, чтобы сообщить диспетчеру функций, что функция завершил свое исполнение. Кроме того, для получения параметра из строки запроса мы используем второй параметр функции, req, который содержит информацию запроса, включая данные параметров запроса.

Помните, что вам нужно будет опубликовать зависимости npm вместе с функциями Azure (дополнительная информация здесь).

Дополнительные сведения о работе с JS в Функциях Azure вы можете найти в Руководстве разработчика JavaScript для Функций Azure.

Заключительные шаги

Все, что вам нужно сделать сейчас, - это развернуть функцию Azure и подключить ее к своему рабочему процессу (или просто выполнить запросы к ней по мере необходимости). Вы можете найти это применительно к более сложному сценарию, когда внешние пользователи приглашаются в клиент Office 365 и добавляются в группы, которые динамически создаются здесь.

Я думаю, что это отличный сценарий для использования в качестве примера функций Azure. Его можно масштабировать без проблем, и это не будет стоить вам, если функция / рабочий процесс не используется. Кроме того, легко вызвать нужную нам логику с помощью простого запроса, что поможет нам легко привязать ее к множеству различных сценариев / вещей. Более того, создание функции Azure с использованием JavaScript дает нам большую гибкость, особенно из-за невероятного количества пакетов, существующих в npm.