带有访问令牌的Oauth2 GET请求在NodeJS中返回403

我目前正在尝试开发一个使用DeviantArt API的节点应用程序。

所有的请求必须通过Oauth2,所以我决定去client_credentialsstream程,因为代码将是所有私人。

所以,一旦我在DeviantArt中注册我的应用程序,我得到了我的clientId和clientSecret。

我正在使用client-oauth2软件包进行授权,代码如下所示:

const Oauth2 = require('client-oauth2'); ... function auth() { return new Promise((resolve, reject) => { let auth = new Oauth2({ clientId: KEYS.client_id, clientSecret: KEYS.client_secret, accessTokenUri: AUTH_URL, // https://www.deviantart.com/oauth2/token authorizationGrants: ['credentials'] }); auth.credentials.getToken() .then((data) => { resolve({ token: data.accessToken }); }) .catch(reject); }); } 

这工作到目前为止,我得到我的access_token 。 所以,我可以使用这个令牌来执行对API的任何请求,并且它实际上通过curl和浏览器使用:

 https://www.deviantart.com/api/v1/oauth2/browse/newest?access_token={{access_token}} 

回到我的节点应用程序中,我正在使用请求包,代码如下所示:

 const request= require('request'); ... function getDeviations(token) { return new Promise((resolve, reject) => { request(`https://www.deviantart.com/api/v1/oauth2/browse/newest? access_token=${token}`, (error, response, body) => { if (error || response.statusCode >= 400) { reject({ error, response }); } else { // do things and resolve } }); }); } 

它返回403禁止

我已经连续两天把我的头撞在键盘上,寻找一个只能用节点返回403的原因。 我已经寻找浏览器,curl和节点请求的差异,但根本没有线索…

有谁知道可能会发生什么?

我知道了…在头文件中伪造用户代理…

 function getDeviations(token) { return new Promise((resolve, reject) => { request({ url: `https://www.deviantart.com/api/v1/oauth2/browse/newest? access_token=${token}`, headers: { 'User-Agent': 'curl/7.44.0' } }, (error, response, body) => { if (error || response.statusCode >= 400) { reject({ error, response }); } else { // do things and resolve } }); }); } 

我不能相信这是有效的。