#azure #microsoft-graph-api #azureportal
#azure #microsoft-graph-api #azureportal
Вопрос:
Я изучаю Microsoft Graph и для этого использую Graph Explorer и Postman.
С помощью Graph Explorer: я вошел в свою личную учетную запись пользователя (hotmail). Как только я подключаюсь, я вижу токен. Странно, когда я копирую / вставляю этот токен в jwt.io он не может быть расшифрован. Тем не менее, я могу выполнить запрос, например https://graph.microsoft.com/v1.0/me который возвращает мне некоторую информацию о себе как о пользователе (с http 200). Или этот запрос https://graph.microsoft.com/v1.0/me/sendMail которые позволяют мне отправлять тест и получать тестовое письмо (с http 202). Все эти запросы были «делегированными разрешениями». Поэтому у меня нет никаких проблем с использованием Graph Explorer с моей личной учетной записью (hotmail).
С Postman: на этот раз я проведу несколько тестов с «разрешением приложения». Я выполнил следующие действия:
На портале Azure
Шаг 1: Регистрация приложений / Новая регистрация / я даю имя / Выбираю 3-й тип учетной записи (учетные записи в любом организационном каталоге и личные учетные записи Microsoft) / Нажмите на кнопку регистрации
Шаг 2: Разрешения Api / Добавить разрешение / Microsoft Graph / Разрешения приложений / Почта.Отправить (отправлять почту от имени любого пользователя)
Шаг 3. Согласие главного администратора на … кнопка для активации разрешения
Шаг 4. Сертификат и секреты / Новый секрет клиента / Введите описание / Нажмите кнопку Добавить
Шаг 5: Получите жетон в Postman
- Публикация
- ЗАГОЛОВКИ
- Тип содержимого: application / x-www-form-urlencoded
- Тело
- client_id: {my-client-id-here}
- client_secret: {my-client-secret-here}
- grant_type: client_credentials
- область применения: https://graph.microsoft.com/.default
- Хорошо, у меня есть жетон
При копировании / вставке этого токена в jwt.io Я вижу это:
Шаг 6. Запрос для перечисления всех пользователей
- ПОЛУЧИТЬ
- АВТОРИЗАЦИЯ
- Токен на предъявителя: {токен на предъявителя-получен-ранее}
- ЗАГОЛОВКИ
- Тип содержимого: application / json
- ХОРОШО, я получил информацию для всех пользователей (в формате json)
Шаг 7. Запрос на отправку почты
- Публикация
- АВТОРИЗАЦИЯ
- Токен на предъявителя: {токен на предъявителя-получен-ранее}
- ЗАГОЛОВКИ
- Тип содержимого: application / json
- ТЕЛО (JSON)
{
"message": {
"subject": "This is my subject",
"body": {
"contentType": "Text",
"content": "This is my content"
},
"toRecipients": [
{
"emailAddress": {
"address": "thierry.langie@skynet.be"
}
}
],
"ccRecipients": [
]
},
"saveToSentItems": "false"
}
- Ошибка NOT OK: MailboxNotEnabledForRESTAPI — REST API еще не поддерживается для этого почтового ящика
Я хотел бы знать, почему я получил эту ошибку? я могу отправлять электронную почту с помощью Graph Explorer (при использовании делегированного разрешения), а не с помощью Postman (при использовании разрешения приложения).
Как вы можете видеть ниже, я предоставляю согласие администратора в корпоративных приложениях на портале Azure.
Я где-то читал, что ошибка означает, что у пользователя нет почтового ящика в облаке EXO. EXO — это O365 Exchange Online Cloud. Поэтому, если у вас нет почтового ящика в облаке, API-интерфейсы O365 Exchange REST не будут работать для этих пользователей. Если это так, что бы вы сделали?
У меня есть веб-приложение, которое должно отправлять письма из общего почтового ящика. Независимо от того, какой пользователь подключен, это всегда один и тот же почтовый ящик, который используется для отправки почты. Вот почему я использую «разрешение приложения» и «Поток учетных данных клиента».
Как объяснялось выше, я использую свою личную учетную запись (hotmail) для тестирования, но в рабочей среде я буду использовать рабочую учетную запись (недоступную из моей среды разработки).
В качестве примечания я знаю, что существуют библиотеки, облегчающие процесс и позволяющие избежать использования вызовов REST API (URL-адресов), но я не думаю, что это может объяснить проблему, с которой я сталкиваюсь.
Комментарии:
1. Как вы правильно заметили, вы получаете сообщение об ошибке «MailboxNotEnabledForRESTAPI» при попытке получить доступ к данному почтовому ящику, который недоступен в Office 365. Чтобы преодолеть это, попробуйте получить доступ к рабочему почтовому ящику (как вы сказали, у вас есть планы получить доступ к своей рабочей учетной записи, и я надеюсь, что это почтовый ящик Office 365), и он будет работать для вас. Надеюсь, это поможет.
2. Определенно, проблема не связана с прямым использованием вызовов REST API или библиотек. В качестве примечания, вы можете попробовать то же самое с POSTMAN, и это сработает для вас. Если вы столкнулись с проблемой, поделитесь ею здесь — я люблю помогать.
3. Итак, из вашего ответа я понимаю, что вы подтверждаете, что проблема заключается не в чем ином, как в том, что личная учетная запись не поддерживается для потока учетных данных клиента (разрешение приложения).
4. Я вижу, что приведенный ниже комментарий, связанный с лицензией EXO или назначением его гостевым пользователем, будет работать, поэтому это неправильно. Вам необходимо убедиться, что данный почтовый ящик находится в Office 365, и это является предварительным условием для доступа с помощью Microsoft Graph API (даже если его гибридное развертывание Exchange Server также).
5. @Dev Я думаю, что мы говорим об одном и том же. Если пользователю назначена лицензия Exchange Online, почтовый ящик размещается в O365. Вы можете попробовать использовать новую рабочую учетную запись, у которой нет лицензии Exchange Online. Это выдаст ту же ошибку
MailboxNotEnabledForRESTAPI - REST API is not yet supported for this mailbox
. И в качестве примера я также упомянул, что мне не удалось добавить EXO license в личную учетную запись, что объясняет , что эта ситуация не поддерживается. Итак, я согласен с этимyou're trying to access a given mailbox which is not available in the Office 365
. Но я не думаю, что я ошибаюсь.
Ответ №1:
«MailboxNotEnabledForRESTAPI — REST API еще не поддерживается для этого почтового ящика» Это сообщение об ошибке означает, что учетная запись электронной почты, которую вы используете для отправки электронной почты, не имеет лицензии Exchange Online.
Для личной учетной записи следует использовать делегированное разрешение, которое вы пробовали в Microsoft Graph Explorer. Смотрите Разрешения здесь.
Если мы добавим личную учетную запись к вашему клиенту в качестве гостевого пользователя, хотя мы можем назначить лицензию гостевому пользователю (я предполагаю, что мы можем назначить гостевому пользователю лицензию EXO), почтовый ящик, размещенный в EXO, отличается от почтового ящика личной учетной записи. Это всего 2 отдельных почтовых ящика. И на самом деле мне не удалось назначить гостю лицензию EXO.
Таким образом, в этом случае поток учетных данных клиента применяется к пользователям AAD, а не к личной учетной записи.
Обновить:
Для личной учетной записи, которая использует делегированное разрешение (вы попробовали в Microsoft Graph Explorer), конечной точкой авторизации является https://login.microsoftonline.com/commonm/oauth2/v2.0/authorize
или https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize
.
Но когда вы используете поток учетных данных клиента с разрешением приложения, вы должны указать идентификатор клиента в запросе https://login.microsoftonline.com/{tenant id}/oauth2/v2.0/authorize
.
Хотя ваша личная учетная запись добавлена в клиент в качестве гостевого пользователя, у нее нет лицензии EXO (на основе теста мы не можем назначить ей лицензию EXO), поэтому она не будет размещена в O365.
Вот почему мы не можем использовать поток учетных данных клиента с личным кабинетом.