Несоответствие токена аутентификации приложения Outlook Mac

Я реализую надстройку для Outlook, надстройка получает вложение и отправляет его на мой сервер для обработки. Он безупречно работает на https://outlook.office.com, но не запускает Outlook 2016 для Mac.

Вот API, к которому я пытаюсь получить доступ:

var getMessageUrl =Office.context.mailbox.restUrl + '/v2.0/me/messages/' +
    {messageID} + "/attachments/" + {attachmentID};

var attachmentID = Office.context.mailbox.item.attachments[0].id;
var messageID = getItemRestId();

$.ajax({
    url: getMessageUrl,
    dataType: 'json',
    headers: {
        'Authorization': 'Bearer ' + outlookToken
    }
}).done(function 1(response) {
    //upload the blob to my server
}).fail(function (error) {
    //call authorise to get a new token
});

function getItemRestId() {
    if (Office.context.mailbox.diagnostics.hostName === 'OutlookIOS') {
        // itemId is already REST-formatted
        return Office.context.mailbox.item.itemId;
    } else {
        // Convert to an item ID for API v2.0
        return Office.context.mailbox.convertToRestId(
            Office.context.mailbox.item.itemId,
            Office.MailboxEnums.RestVersion.v2_0
        );
    }
}

Используя Outlook 2016 для Mac, я получаю 401 из вышеуказанного API.

Кроме того, auth_token, который я получаю от вызова getCallbackTokenAsync в Outlook 2016 для Mac, отличается от того, который я получаю в браузере:

Office.context.mailbox.getCallbackTokenAsync({isRest: true}, function (result) {
    if (result.status === "succeeded") {
        //save result.value
    } 
    else {
        //error condition
    }
});

Значения в моем манифесте:

<Set Name="MailBox" MinVersion="1.3"/>
<Permissions>ReadWriteMailbox</Permissions>

Может кто-нибудь указать, что я здесь делаю не так?

ОБНОВЛЕНИЕ. По совету Джейсона я проверил полученный токен на jwt.io. Версии токена в браузере и в приложении для Mac различаются.

On the Browser: "ver": "Exchange.Callback.V2" On the Mac App: "ver": "Exchange.Callback.V1" 

Как заставить outlook_mac_app вернуть v2 токена?


person EmptyCup    schedule 01.02.2018    source источник
comment
Вы должны указать полную ошибку, которая должна быть представлена ​​в теле ответа. Также было бы неплохо проанализировать токены с помощью jwt.io, чтобы найти очевидные различия. На первый взгляд ваш код выглядит нормально.   -  person Jason Johnston    schedule 01.02.2018
comment
@jasonJohnston Я обновил вопрос результатами jwt.io. У токенов разная версия, отсюда и ошибка 401.   -  person EmptyCup    schedule 02.02.2018
comment
Вы должны получить токен V2, если у вас есть ReadWriteMailbox. В противном случае в Outlook Mac может быть ошибка. Я не видел здесь такого поведения, но я участвую в программе Office Insiders Fast, поэтому я получаю последние обновления. Можете ли вы проверить наличие обновлений на своем клиенте и подтвердить, какую версию вы используете?   -  person Jason Johnston    schedule 02.02.2018
comment
Я использую версию 16.9 build 180116   -  person EmptyCup    schedule 04.02.2018
comment
Вероятно, в этом проблема. У меня 16.10 180114, и я получил подходящий жетон. Похоже, у вас последняя сборка выпуска, а не часть программы предварительной оценки Office. Можете ли вы попробовать сборку Office Insider (это опция в программе обновления), чтобы исключить другие проблемы?   -  person Jason Johnston    schedule 05.02.2018
comment
Ага! Только что обновился и все работает нормально.   -  person EmptyCup    schedule 12.02.2018


Ответы (1)


Я не могу комментировать, поэтому отправляю это как ответ.

Я набирал 403 для вложений в Outlook для Mac 2016, не уверен, связаны ли они, но вы можете взглянуть на это здесь https://github.com/OfficeDev/outlook-add-in-command-demo/issues/30

person Abhishek S Jain    schedule 01.02.2018
comment
Я попытался запустить их код RestCaller внутри своего надстройки, там та же проблема. Я получаю {readyState: 0, status: 0, statusText: error}. Версии токенов разные. - person EmptyCup; 02.02.2018