В настоящее время я настраиваю процесс демона для доступа к Microsoft Graph, извлекая токен доступа, а затем отправляя запрос GET в API Calendar [dot] Read . Пока я могу получить токен доступа, но у меня возникают проблемы с выполнением запроса GET. Вот мой код.
//// Running on NODEJS....
const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
// App configuration
const APP_ID = '***************************************';
const TENNANT = '***************************************';
const APP_SECRET = '***************************************';
const SCOPES = 'https://graph.microsoft.com/.default';
const TokenEndpoin = `https://login.microsoftonline.com/{${TENNANT}}/oauth2/v2.0/token`;
const sendcontent = `client_id=${APP_ID}&scope=${SCOPES}&client_secret=${APP_SECRET}&grant_type=client_credentials`;
const api_url_readCalender = `https://graph.microsoft.com/v1.0/users/`;
//// Not sure what api_url_readCalender is suppose to be.
/**
* Run POST to retrieve token then,
* Run GET to retrieve calendar API using token...
*/
POST( TokenEndpoin, sendcontent, (data) => {
const token_obj = JSON.parse(data);
/// Run GET with token and url for read calender.
GET( api_url_readCalender, token_obj, (data)=> {
var ojv = JSON.parse(data);
console.log(ojv);
});
});
/// Post & Get Functions...
function POST(destination, scontent, cb) {
var http = new XMLHttpRequest();
http.onreadystatechange = function() {
console.log(http.readyState, http.status);
if (http.readyState == 4 && http.status == 200) {
var data = http.responseText;
cb(data);
}
};
http.open( 'POST', destination, true);
http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http.send(scontent);/// scontent is sendcontent passed by parameter.
}
function GET( destination, token, cb ) {
var http = new XMLHttpRequest();
http.onreadystatechange = function() {
/// Print readyState and status
console.log(http.readyState, http.status );
console.log( http.responseText);
if (http.readyState == 4 && http.status == 200) {
var data = http.responseText;
cb(data);
}
};
http.open( 'GET', destination, true );
/// Use toke_type and access_token for authentication.
http.setRequestHeader('Authorization', token.token_type+' ' + token.access_token);
http.send();
}
Я почти уверен, что мои разрешения настроены правильно на стороне портала Microsoft Azure. Я НЕ уверен, каким должен быть URL для доступа к API. В настоящее время значение api_url_readCalender установлено на https://graph.microsoft.com/v1.0/users/
. Это возвращает response.text в чтении GET ...
"{
"error": {
"code": "Authorization_RequestDenied",
"message": "Insufficient privileges to complete the operation.",
"innerError": {
"request-id": "bfdb54e2-f9ad-4d75-be71-45ae807add5f",
"date": "2019-10-02T23:16:17"
}
}
}"
Функция http.status GET возвращает 403 Запрещено.
Мое приложение зарегистрировано. Я выбрал разрешения «Microsoft-Graph> Разрешения приложений> Calendars.Read».
Я уверен, что данные конфигурации моего приложения верны. За исключением SCOPES и api_url_readCalender . Не уверен насчет SCOPES , потому что в прочитанном мною учебнике Microsoft просто используйте .default . Я не уверен насчет api_url_readCalender , потому что я не читал четкой документации о том, какой адрес API должен быть для моего варианта использования, как только у меня будет токен. Я хочу получать события из моего календаря.