node.js https POST с атрибутами тела - КАК?

Я пытаюсь получить токен с моего сервера node.js.

Приведенный ниже код выполняется, когда кто-то вызывает REST-API моего сервера (при обработке этого вызова сервер сам выполняет несколько вызовов).


В POSTMAN работает следующая конфигурация:

URL: https://login.windows.net/MyCompanyTenant.onmicrosoft.com/oauth2/token

Заголовок:

  • Cache-Control: без кеша
  • Тип контента: application/x-www-form-urlencoded

Тело:

  • client_id: YourClientIdFromAzureAd
  • ресурс: https://mycompanytenant.crm.dynamics.com/
  • имя пользователя: yourServiceUser@myCompanyTenant.onmicrosoft.com
  • пароль: ваш ServiceUserPassword
  • grant_type: пароль
  • client_secret: YourClientSecretFromAzureAd

Теперь мой ошибочный код пытается построить этот запрос:

function retrieveAuthToken() {
    var deferred = q.defer();   

    var bodyDataString = querystring.stringify({
        grant_type: "password",
        client_id:  someClientId, 
        resource: someUrl,
        username: someUsername,
        password: someUsernamePassword,        
        client_secret: someString
   });
   //I also tried replacing thie bodyDataString by the bodyString from the working request provided by Fiddler

    var options = {
        host: 'login.windows.net',
        path: '/someTenant/oauth2/token',
        method: 'POST',
        headers: {
            "Content-Type": "application/x-www-form-urlencoded",
            "Cache-Control": "no-cache"
        }
    };  

    var request = https.request(options, function(response){
        var body = '';
        response.on('data', function(d) {
            body += d;
        });
        response.on('end', function() {
            var parsed = JSON.parse(body); //todo: try/catch
            rdeferred.resolve(parsed.access_token);
        });               
    });

    request.on('error', function(e) {
        console.log(e.message);
        deferred.reject();
    });

   request.write(bodyDataString ); 
   return deferred.promise;    

Я не вижу никакой ошибки, мой сервер просто ждет и ждет...

1 ответ

Решение

Вы скучаете по request.end() закончить запрос. Или как ярлык, вы можете изменить один request.write(bodyDataString) в request.end(bodyDataString),

Другие вопросы по тегам