Не удалось получить токен доступа для вызова javascript API-интерфейса Microsoft Graph API - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь создать надстройку Outlook для своей организации (подписка Office ProPlus).Я успешно могу использовать / me, / findMeetingTimes, / getSchedule и другие API (https://docs.microsoft.com/en-us/graph/outlook-calendar-concept-overview).

. Мне бы хотелось получать новый access_token каждый раз, когда истекает срок его действия, но я не могу добраться до API токена.чтобы получить новый access_token, используя токен обновления из моего вызова javascript.

Я могу нажать API https://login.microsoftonline.com/common/oauth2/token через почтальона и получить идеальный ответ:

Ответ:

{
    "token_type": "Bearer",
    "scope": "Calendars.ReadWrite Calendars.ReadWrite.Shared Contacts.ReadWrite Contacts.ReadWrite.Shared Files.ReadWrite.All Mail.ReadWrite Mail.ReadWrite.Shared Mail.Send People.Read.All profile User.Read User.ReadWrite openid email",
    "expires_in": 3599,
    "ext_expires_in": 3599,
    "access_token": "eyJ0eXAiOiJKV1QiLCJub25jZSI6IkFRQUJBQUFBQUFDNXVuYTBFVUZnVElGOEVsYXh0V2pUaGVqcWYwNDNiZF9RZjQ5a1NxQnMub25taWNyb3NvZnQuY29tIiwidXRpIjoiUWJ5NnNSRkcya3VtZFVLZUFFZlhBUSIsInZlciI6IjEuMCIsIndpZHMiOlsiNjJlOTAzOTQtNjlmNS00MjM3LTkxOTAtMDEyMTc3MTQ1ZTEwIl0sInhtc19zdCI6eyJzdWIiOiJMS2VIdEdZb1FPSFlrTjNvenAxeVp6Y1BmLWgzT2NiV2ZpWVBEOFpBYUNnIn0sInhtc190Y2R0IjoxNTQzMjM1Mzk3fQ.f8OtUmkpz88JXwrLEeFj1aDV6L6Pm1W6-zPdqHjNaCej8OV6v.......(rest of the token)........FQ9A2APQuErfSljCYFFbsDzh5pvYYtwbbTT4TqnUSczEND2yWmgEONmF4tZUXFoFz49q0Z69rWSb-iJ_C0mQ",
    "refresh_token": "OAQABAAAAAAC5una0EUFgTIF8ElaxtWjTqne9aI0dwA5LgpuS878-78FMJrAfgwgXMWiA5KC5WE2......(rest of the token)......XMpn34b0TKU74LdeGTo3lTS0VGlY1FzJ729QH0Nmcg5k86aOesnk2essqoMskUKOY1Wq8d6C75JVd385LzVBsOvjpRVzcZ26htbToV40U5wQ9R20ejpLiCgAnxFlDsS9pG-0huTPlGaeSZS5kYECrDpWapyv4TckEnXPWWGVOeZIdaf6HB41IhNJ6OYy_HFbDFmlu2TqGQhRadNB827B87cbcOdARZyHc-"
}

Однако, когда я пытаюсь точно такой же запрос в моем javascript:

var data = "client_id=<client_id>&scope=user.read%20calendars.readWrite.shared%20mail.send&refresh_token=<refresh_token>&redirect_uri=https%3A%2F%2Flocalhost%3A3000%2F&grant_type=refresh_token&client_secret=<client_secret>";

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function (responseText) {
    if (this.readyState === 4 && this.status == 200) {
        console.log(responseText);
        document.getElementById("startTime").innerHTML = "Success " + xhr.response; //Setting an add-in field to success, just as indicator
    }
    else{
        document.getElementById("startTime").innerHTML = "Error " + xhr.response; //Setting an add-in field to success, just as indicator
    }
});

xhr.open("POST", "https://login.microsoftonline.com/<tenant-id>/oauth2/token"); 
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("cache-control", "no-cache");
xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
xhr.setRequestHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE');
xhr.setRequestHeader('Access-Control-Allow-Headers', 'Content-Type');

xhr.send(data);

я получаю пустой ответ:

Error 

Если я пытаюсь xhrВместо .responseXML я получаю:

Error null

Что я делаю не так? Есть ли пример вызова javascript / ajax для https://login.microsoftonline.com/common/oauth2/token API?

Застрял на этом довольнокакое-то время, любая помощь или предложения будут очень благодарны!

Не могу найти никакой помощи на форумах

Заранее спасибо и ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...