Невозможно сгенерировать токен доступа OAuth 2.0 из Office365 через JavaScript - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь получить токен доступа из конечной точки /token платформы идентификации Office365 через Поток предоставления учетных данных клиента OAuth 2.0 . У меня зарегистрировано приложение, идентификатор и секретный номер клиента и т. Д. c ...

Я могу сделать POST-запрос в Postman и получить маркер доступа без проблем: enter image description here

Однако, когда я пытаюсь выполнить запрос POST через JavaScript (через скрипт Google Apps), я получаю сообщение об ошибке: AADSTS900144: The request body must contain the following parameter: 'grant_type'

Я уже сделал это в Google ошибки и нашли кучу разных решений, и пытались реализовать их безрезультатно. Я предполагаю, что это связано с кодировкой URL, но не могу понять.

Код:

function getO365() {
  // POST Request (To get Access Token)
  var tenantID = 'longstringhere'
  var appID = 'longstringhere'
  var appSecret = 'longstringhere'
  var graphScore = 'https://graph.microsoft.com/.default'

  var url = 'https://login.microsoftonline.com/' + tenantID + '/oauth2/v2.0/token'

  var data = {
    'client_id': appID,
    'scope': graphScore,
    'client_secret': appSecret,
    'grant_type': 'client_credentials'
  };

  var postOptions = {
    'method': 'POST',
    'headers': {
      'Accept': 'application/json',
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    'body': data,
    'redirect': 'follow'
  };

  var authToken = UrlFetchApp.fetch(url, postOptions);

}

Единственная реальная разница между моим кодом и JavaScript Код извлечения, который я извлек из Почтальона:

var urlencoded = new URLSearchParams();
urlencoded.append("client_id", "longstringhere");
urlencoded.append("scope", "https://graph.microsoft.com/.default");
urlencoded.append("client_secret", "longstringhere");
urlencoded.append("grant_type", "client_credentials");

Когда я пытаюсь использовать URLSearchParams в скрипте Google Apps, я получаю эту ошибку: ReferenceError: URLSearchParams is not defined

Любые идеи ? Заранее спасибо!

1 Ответ

1 голос
/ 03 мая 2020

Это было решено путем изменения body для UrlFetchApp в соответствии с документацией . Отредактированный код для отражения изменений. Благодарим @ TheMaster за указание на мою ошибку.

'payload': data,//from   'body': data,
...