NodeJS 中带有访问令牌 returns 403 的 Oauth2 GET 请求
Oauth2 GET request with access token returns 403 in NodeJS
我目前正在尝试开发一个使用 DeviantArt 的节点应用程序 API。
所有请求都必须通过 Oauth2,所以我决定使用 client_credentials 流程,因为代码将全部保密。
所以,一旦我在 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}}
回到我的节点应用程序,我正在使用 request 包,代码如下所示:
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
}
});
});
}
它 returns 403 禁止.
我这两天一直在用头敲键盘,想找个理由 return 403 只有 node.我一直在寻找来自浏览器、curl 和节点的请求的差异,但完全没有线索...
有谁知道可能会发生什么?
我明白了...在headers中伪造用户代理...
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
}
});
});
}
我不敢相信这行得通。
我目前正在尝试开发一个使用 DeviantArt 的节点应用程序 API。
所有请求都必须通过 Oauth2,所以我决定使用 client_credentials 流程,因为代码将全部保密。
所以,一旦我在 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}}
回到我的节点应用程序,我正在使用 request 包,代码如下所示:
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
}
});
});
}
它 returns 403 禁止.
我这两天一直在用头敲键盘,想找个理由 return 403 只有 node.我一直在寻找来自浏览器、curl 和节点的请求的差异,但完全没有线索...
有谁知道可能会发生什么?
我明白了...在headers中伪造用户代理...
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
}
});
});
}
我不敢相信这行得通。