Проблема с доступом к календарному API Microsoft Graph. Authorization_RequestDenied - PullRequest
1 голос
/ 03 октября 2019

В настоящее время я настраиваю процесс демона для доступа к 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 должен быть для моего варианта использования, как только у меня будет токен. Я хочу получать события из моего календаря.

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