Почтовые ящики Microsoft Graph Access без вошедшего в систему пользователя - PullRequest
1 голос
/ 08 мая 2020

Я следил за потоком учетных данных клиента, чтобы получить токен доступа клиента. Этот токен привязан к приложению с разрешением Mail.ReadWrite. Согласно справочнику разрешений Microsofts здесь мне не нужен пользователь, чтобы получить все почтовые ящики. Я не вижу ни одной конечной точки, которая позволяет мне извлекать почтовые ящики без связанного пользователя. Как мне получить список почтовых ящиков, к которым мое приложение имеет доступ, не запрашивая пользователей? Код, который я написал, находится в C# и использует MSAL. NET и ms-graph API, хотя я пробовал использовать остальной API, отправляя необработанные команды вне API.

Ответы [ 3 ]

0 голосов
/ 09 мая 2020

Microsoft Graph API поддерживает доступ к данным в основных и общих почтовых ящиках пользователей , но не перечисляет все почтовые ящики для данного пользователя или пользователей, что можно сделать с помощью Exchange Powershell .

При этом вы можете для каждого пользователя делать такие вещи, как:

Список сообщений :

GET /me/messages
GET /users/{id | userPrincipalName}/messages

Список почтовых папок :

GET /me/mailFolders
GET /users/{id | userPrincipalName}/mailFolders

И другие, как те, что включены в Общие варианты использования .

Наконец, попробуйте использовать наименее привилегированные разрешения. Mail.ReadWrite имеет высокие привилегии.

0 голосов
/ 10 мая 2020

Вы не можете этого сделать, имея пользователя id или userPrincipalName. Шаблон для доступа к данному почтовому ящику - https://graph.microsoft.com/v1.0/users/{id|upn}/messages. Не зная, к какому пользователю вы хотите обратиться, Graph не может направлять ваши звонки в правильный почтовый ящик.

Независимо от того, какие разрешения требуются вашему приложению, если вы обращаетесь к данным пользователя, вы также должны запросить User.Read.All. Практически каждый вызов, который взаимодействует с данными пользователя, потребует пользователя id или userPrincipalName как часть этого вызова.

Имейте в виду, что данные Exchange могут быть связаны как с пользователями, так и с группами, поэтому вам также может потребоваться запрос Group.Read.All.

0 голосов
/ 09 мая 2020

у вас есть правильное разрешение, поскольку разрешение api mail.readwrite graph дает вам разрешение на чтение всех почтовых ящиков. Почтовые ящики привязаны к пользователям или группам. поэтому вам нужно будет указать либо всех пользователей, либо все группы. но это не гарантирует, что почтовый ящик существует. вы можете выполнить вызов графика для конечной точки бета-версии, которая включает лицензии, и отфильтровать по назначенным планам, которые включают обмен. Для меня это было бы наиболее элегантным решением. если у кого-то нет идеи получше. Я знаю, что вы можете перечислить всех пользователей, а затем сделать второй звонок, чтобы проверить, существуют ли настройки почтового ящика или календарь, но я считаю это менее элегантным ..

В любом случае вам придется запрашивать пользователей или группы, потому что нет такая вещь как почтовый ящик без пользователя или группа o365.

...