2016-07-22 16 views
0

Ich versuche, ein Token mit meinem node.js Server zu bekommen.node.js https POST mit Körperattributen - WIE?

Der folgende Code wird ausgeführt, wenn jemand die REST-API meines Servers anruft (innerhalb der Verarbeitung dieses Aufrufs ruft der Server selbst mehrere Aufrufe auf).


Die folgende Konfiguration arbeitet in POSTMAN:

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

Rubrik:

  • Cache-Control: no-cache
  • Content-Type: application/x-www-form urlencoded-

Körper:


Jetzt Mein Fehler-Code versucht, diese Anforderung zu bauen:

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;  

Ich sehe nicht, einen Fehler, mein Server nur wartet und wartet ...

Antwort

1

Sie vermissen eine request.end(), um die Anfrage zu beenden. Oder als Abkürzung können Sie die einzelne zu request.end(bodyDataString) ändern.

+0

arbeitete wie ein Charme! – IntegerWolf