2016-05-12 5 views
2

Im пытается построить запрос OAuth2 API-интерфейсу Box. Пример запроса POST, который они дают в качестве ориентира, немного неоднозначен для меня, поскольку я недавно изучал развитие бэкэнд. Пример выглядит следующим образом:Узел 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 ow, чтобы начать строить строку на основе примера API Box. Если кто-то может помочь и даже разоблачить меня хорошими статьями или учебниками о том, как это сделать, это было бы здорово!

спасибо.

ответ

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