Использование бета-версии Outlook REST API из надстройки Outlook

Я создал надстройку Outlook с ReactJS и следовал этому руководству, чтобы получить токен для использования REST API Outlook v2.0: https://docs.microsoft.com/en-us/офис/dev/add-ins/outlook/use-rest-api

Теперь я хотел бы начать использовать API REST Outlook Beta, и я решил, что могу использовать тот же токен для выполнения вызовов API, однако я получаю следующую ошибку, которая предполагает, что я не могу использовать этот токен:

{"error":{"code":"UnableToReadToken","message":"OAuth token submitted with the request can not be parsed.","innerError":{"requestId":"b96fc800-82d4-4b6d-8aa0-0b9ff6a36873","date":"2020-02-21T09:27:27"}}}

Есть ли способ вызвать этот API с помощью токена, созданного Office.context.mailbox.getCallbackTokenAsync? Мне известно, что я, вероятно, могу получить токен oauth2 через Azure AD, однако на портале Azure AD у меня нет надлежащего доступа администратора для выполнения этого процесса, поэтому я ищу решение, которое не полагается на это.

Вот фрагмент кода моих функций для получения токена и вызова API:

getToken() {
    return new Promise(async function (resolve, reject) {
      try {
        Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) {
          if (result.status === "succeeded") {
            let accessToken = result.value;
            console.log(result.value);
            resolve(accessToken);
          } else {
            console.log(result.status);
            reject(result.status);
          }
        });
      } catch (error) {
        console.error(error);
        reject(error);
      }
    })
  }



getRules(token) {
    return new Promise(async function (resolve, reject) {
      try {
        const url = 'https://outlook.office.com/api/beta/me/mailfolders/inbox/messagerules';
        const header = new Headers({ 'Authorization': `Bearer ${token}` });
        const options = {
          headers: header
        };
        let response = await fetch(url, options);
        let jsonResponse = await response.json();
        console.log(jsonResponse);
        resolve(jsonResponse);
      } catch (error) {
        console.error(error);
        reject(error);
      }
    });
  }

person Riley MacDonald    schedule 21.02.2020    source источник
comment
Токен, предоставляемый getCallbackTokenAsync, не имеет области, необходимой для вызова REST API сообщений. Даже для сценария, отличного от БЕТА, этот API не должен работать с этим токеном.   -  person Outlook Add-ins Team - MSFT    schedule 25.02.2020


Ответы (1)


Вы упомянули, что у вас нет надлежащего административного доступа для использования конечной точки аутентификации AD v2.

В настоящее время существует два подхода к регистрации приложений и авторизации пользователей. Вы подтвердили, может ли случайно один из этих методов все еще работать ...

Используйте конечную точку аутентификации Azure AD v2: https://docs.microsoft.com/en-us/previous-versions/office/office-365-api/api/beta/use-outlook-rest-api-beta#RegAuthConverged

Используйте Azure Active Directory и OAuth: https://docs.microsoft.com/en-us/previous-versions/office/office-365-api/api/beta/use-outlook-rest-api-beta#RegAuthAzure

...

Некоторая дополнительная информация (о которой вы, возможно, уже знаете):

Конечная точка аутентификации v2 переведена из предварительной версии в статус общедоступной (GA) для разработчиков Outlook и Outlook.com.

Если у вас есть рабочее приложение, которое использует Windows Live API для доступа к данным почтового ящика Outlook.com, вы должны переписать приложение, чтобы использовать конечную точку аутентификации v2 и Outlook REST API. Поскольку API Windows Live не рекомендуется для Outlook.com, а для пользователей Outlook.com в почтовых ящиках включен Outlook REST API, эти пользователи будут получать ошибки HTTP 404 при попытке запустить такие приложения Windows Live API.

Подробнее читайте здесь: https://docs.microsoft.com/en-us/previous-versions/office/office-365-api/api/beta/use-outlook-rest-api-beta

person Davanand Ganessingh    schedule 02.03.2020