Использование Outlook REST API Beta из надстройки Outlook - PullRequest
4 голосов
/ 21 февраля 2020

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

Теперь я хотел бы начать использовать Outlook Beta REST API и решил, что могу использовать тот же токен для выполнения вызовов 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);
      }
    });
  }

1 Ответ

0 голосов
/ 02 марта 2020

Вы упомянули, что у вас недостаточно прав администратора для использования конечной точки аутентификации 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 и API Outlook REST. Поскольку Windows Live API устарел для 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

...