Я пытаюсь создать надстройку 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?
Застрял на этом довольнокакое-то время, любая помощь или предложения будут очень благодарны!
Не могу найти никакой помощи на форумах
Заранее спасибо и ура!