Для работы с почтой обычно используются стандартные подходы, которые уже реализованы в DIRECTUM. На одном из проектов заказчик ввиду определенных причин решил отказаться от использования программного продукта Microsoft Outlook на сервере и протоколов SMTP/IMAP. Альтернативным вариантом организации работы с электронной почтой стало решение «Интеграция DIRECTUM c Microsoft Office 365 через Microsoft Graph REST API».
Цель проекта – автоматизировать работу с сервисами Microsoft Office 365 (почта, календарь, контакты Outlook и пр.) с использованием Microsoft Graph REST API.
Задачи:
Решение представляет собой набор компонентов системы, который позволяет выполнять следующие действия:
Для получения доступа к определенным ресурсам Microsoft Graph требует токен. К примеру, маркер нужен для доступа к календарю пользователя, создания и отправки писем, чтения профиля. При каждом обращении к API необходимо передавать полученный маркер доступа добавлением в заголовок авторизации HTTP. Microsoft Graph поддерживает необязательные параметры запросов OData. Они позволяют ограничивать объем результатов, количество полей по каждому элементу. Возможность использования определенных параметров запросов варьируется для разных операций API. API Microsoft Graph работает по протоколу HTTPS. Все данные доступны только в формате JSON.
Для хранения настроек и данных для вызова API был разработан справочник «Настройки приложений Microsoft Azure». Для каждого потока OAuth в DIRECTUM должна быть заведена соответствующая настройка.
Карточка справочника «Настройки приложений Microsoft Azure»
Для удобства настройки решения был разработан соответствующий диалог.
Для авторизации используется механизм серверной авторизации на базе протокола OAuth 2.0. Каждый поток OAuth имеет свой порядок авторизации. Процесс взаимодействия системы DIRECTUM с Microsoft Graph в общем виде можно представить на схеме ниже.
Взаимодействие системы DIRECTUM с Microsoft Graph
В системе DIRECTUM были реализованы следующие потоки OAuth, каждый из которых обеспечивает безопасную аутентификацию и позволяет получить доступ к API из системы DIRECTUM:
В этом случае поток основан на перенаправлении (redirection). Это означает, что система должна быть в состоянии взаимодействовать с пользователем. При регистрации указывается URI перенаправления, который используется для направления ответов обратно в систему. После получения кода мы можем применить его для получения маркера доступа к требуемому ресурсу. Срок действия кода авторизации истекает через 10 минут. Используя маркер обновления (refresh_token), маркер доступа нужно обновлять после его истечения, чтобы продолжить пользоваться запросами, поскольку их срок действия так же ограничен (3600 секунд).
В этом потоке для запроса маркера доступа используются идентификатор и секрет приложения. Имеется доступ ко всем почтовым ящикам. Используется для выполнения задач от имени зарегистрированного приложения, в нашем случае, системы DIRECTUM. Например, обеспечение доступа к информации, которая хранится в аккаунте системы на портале Azure.
ROPC - один запрос: система отправляет идентификатор клиента и учетные данные пользователя, а затем получает токен в ответ. Можно использовать для выполнения фоновых задач от имени конкретного пользователя.
После успешной авторизации мы можем осуществлять запросы к API. Для доступа к ресурсу могут потребоваться особые разрешения, которые настраиваются на портале приложений Azure.
При отправке запросов в некоторых случаях могут появиться ошибки. Например, маркер обновления не имеет разрешения на определенное действие, становится устаревшим или отозванным. При возникновении ошибок система DIRECTUM получает соответствующий код ошибки, по которому можно определить причину ошибки. Для хранения кода ошибки, причин и рекомендуемых действий был разработан отдельный справочник. При получении ошибки администратор решения получает уведомление с соответствующей информацией.
В результате использования решения достигается:
Обсудите реализацию с экспертом Directum