0

Я пытаюсь получить токен с моим сервером node.js.node.js https POST с атрибутами тела - КАК?

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


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

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

Заголовок:

  • Cache-Control: нет-кэша
  • Content-Type: применение/х-WWW-форм-urlencoded

тела:


Теперь мой провал код пытается построить этот запрос:

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).

+0

работал как очарование! – IntegerWolf