2016-05-12 105 views
2

我試圖構建一個OAuth2請求到Box API。他們給出的示例POST請求作爲指導對我來說有點模糊,因爲我最近正在學習後端開發。該示例如下:Node JS - 構建OAuth2請求

POST /token 
Content-Type: application/x-www-form-urlencoded 
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer& 
assertion=<JWT>& 
client_id=<client_id>& 
client_secret=<client_secret> 

官方文檔: https://box-content.readme.io/docs/app-auth

我試圖做到這一點是如下的方式:

var boxHeaders = { 
    'Content-Type': 'application/x-www-form-urlencoded' 
}; 

var boxOptions = { 
    url: 'https://api.box.com/oauth2/token', 
    method: 'POST', 
    headers: boxHeaders, 
    form: { 
    'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer', 
    'assertion': boxtoken, 
    'client_id': 'myclientid', 
    'client_secret': 'myclientsecret' 
    } 
}; 

request.post(boxOptions, function(err, response, body) { 
    console.log(body); 
}); 

我收到以下錯誤:

{ 
    "error":"invalid_request", 
    "error_description":"Invalid grant_type parameter or parameter missing" 
} 

顯然授權類型不正確,但我不知道h基於Box API示例來構建字符串。如果任何人都可以幫助,甚至向我展示一些關於如何做到這一點的好文章或教程,那就太棒了!

謝謝。

回答

1

我只是爲自己而努力。我能夠通過將當前在boxOptions.form中的所有內容移動到請求正文中來實現此目的。

例如:

var boxHeaders = { 
    'Content-Type': 'application/x-www-form-urlencoded' 
}; 

var boxOptions = { 
    url: 'https://api.box.com/oauth2/token', 
    method: 'POST', 
    headers: boxHeaders 
}; 

var form = { 
    grant_type:'urn:ietf:params:oauth:grant-type:jwt-bearer', 
    client_id: 'id', 
    client_secret: 'secret', 
    assertion: boxtoken 
}; 

var request = https.request(boxOptions, function(response) { 
    // do stuff 
}); 

request.write(querystring.stringify(form)); 
request.end(); 

希望這有助於。不幸的是,我並不熟悉請求庫來提供使用它的例子。

+0

嗨,莎拉,謝謝。儘管後來我遇到了其他錯誤,但我通過這樣做來實現這一目標。 – Aaron