Доступ к почтовому ящику Exchange 2016 с использованием Graph API (гибридная установка)

У меня есть почтовый ящик на сервере предварительного обмена (который находится в гибридном режиме) abc@onprem.com и я пытаюсь получить доступ к этому через график API (/ сообщения). Это прекрасно работает, если я делаю это в графическом обозревателе, но не работает, когда я делаю это через реализацию.

Требуемое разрешение приложения дается на портале регистрации приложений Azure. Реализация использует grant_type в качестве client_credentials с сертификатом, и это отлично работает для облачных пользователей.

Ответ API

{ 'error': {
    'innerError': {
        'date': '2019-02-28T14:17:45', 
        'request-id': '6a85f8c3-4e13-4cf0-84b2-ddc934241afd'
    },
    'message': '', 
    'code': 'UnknownError'
    }}

Журналы IIS

  1. Для вызова пришел из графического проводника

2019-02-28 15:02:31 172.31.10.98GET /api/V2.0/Users('abc@onprem.com')/Messages/$count &CorrelationID=;&cafeReqId=bc8e8aef-de46-4c72-bcf4-b4f567bc45dd; 443 S-1-5-21-1392771109-4043059535-3934338706-1147 20.190.145.177Mozilla/5.0+(Macintosh;+Intel+Mac+OS+X+10_14_3)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/71.0.3578.80+Safari/537.36 - 200 0 0 287

  1. Для звонка из внедренного приложения

2019-02-28 15:00:05 172.31.10.98GET /api/V2.0/Users('abc@onprem.com')/Messages/$count &CorrelationID=;&cafeReqId=c504b658-b9df-43b5-9dbb-8e83050c3d2f; 443 - 20,190,128,103 - - 401 0 0 102

  1. Как отладить, почему не удается выполнить проверку подлинности на предварительных почтовых ящиках, и причину этого?

  2. Есть ли журналы, на которые я могу сослаться?

  3. Кроме того, что может быть причиной этого сбоя аутентификации, может быть потому, что этот токен предоставляется Azure AD, который аутентифицируется на onprem?

0 ответов

Проблема на самом деле в другом - Exchange не поддерживает поток client_credentials. Однако вы можете принудительно выполнить его с помощью следующей PowerShell (обязательно перезапустите IIS после применения):

$apps = Get-PartnerApplication
# Microsoft Graph is 2nd item in the array, if you are unsure, list the items by calling $apps first
$apps[1] | Set-PartnerApplication -AppOnlyPermissions $apps[1].ActAsPermissions

Полное объяснение можно найти здесь: https://blog.thenetw.org/2019/05/13/using-client_credentials-with-microsoft-graph-in-hybrid-exchange-setup/