0

node.jsサーバーでトークンを取得しようとしています。node.js https body-attributesのPOST - どのように?

以下のコードは、自分のサーバーのREST-APIを呼び出したときに実行されます(この呼び出しの処理の中で、サーバーはいくつかの呼び出しを自分で行います)。


次の設定は、POSTMANで動作します:

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

ヘッダー:

  • のCache-Control:キャッシュなし
  • のContent-Type:アプリケーション/ x-www-form-urlencodedで

ボディ:

  • のclient_id:YourClientIdFromAzureAd
  • リソース:https://myCompanyTenant.crm.dynamics.com
  • ユーザ名:[email protected] .com
  • パスワード:yourServiceUserPassword
  • 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)に変更することができます。

+0

チャームのように働いた! – IntegerWolf

関連する問題