如何正确发送 oauth 1.0 请求以使用 nodejs 验证凭据
How can I send properly an oauth 1.0 request to verify credentials with nodejs
我在尝试调试时遇到了问题,希望能得到一些帮助。
oauthToken 变量和 curl 命令中的 oauth_token 以及消费者密钥是相同的。
这个 curl 命令有效:
curl --get 'https://api.twitter.com/1.1/account/verify_crn: OAuth oauth_consumer_key="dv5trHvHDrAjIM87Z3KGtJrq5", oauth_nonce="7aec4b5b37ab420d44717387e2f889be", oauth_signature="qm4i0jGOPbbmYkaOFCoJhOfgcd4%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1443690396", oauth_token="71611055-pzDi5UJQXKzdP4kBLceLLwuzel8DKiRjNivlmkCuA", oauth_version="1.0"' --verbose
以下两个没有,而且它们应该具有相同的参数。他们 return
401 - {"errors":[{"code":32,"message":"Could not authenticate you."}
首先尝试 https://www.npmjs.com/package/request#oauth-signing
const oauth={
consumer_key:config.get('twitter.consumerKey'),
token:oauthToken,
}
console.log(oauth);
requestAsync({
url:'https://api.twitter.com/1.1/account/verify_credentials.json',
method:'GET',
oauth,
})
第二次尝试 https://github.com/ciaranj/node-oauth
const oauthToken=req.body.accessToken.split(':')[0];
const oauthTokenSecret=req.body.accessToken.split(':')[1];
console.log(oauthToken+" " + oauthTokenSecret);
const oauth = new OAuth.OAuth(
'https://api.twitter.com/oauth/request_token',
'https://api.twitter.com/oauth/access_token',
config.get('twitter.consumerKey'),
config.get('twitter.consumerSecret'),
'1.0A',
null,
'HMAC-SHA1'
);
oauth.get(
'https://api.twitter.com/1.1/account/verify_credentials.json',
oauthToken,
oauthTokenSecret,
function (e, data, res){
if (e) console.error(e);
console.log(require('util').inspect(data));
});
如 request docs 中所述,您必须提供 4 个必需的 OAuth 参数:
request({
oauth: {
consumer_key: '...',
consumer_secret: '...',
token: '...',
token_secret: '...'
}
})
您可以从 OAuth 应用程序的设置页面获取 consumer_key
和 consumer_secret
。用户的token
和token_secret
可以通过执行OAuth流程得到。
您可以使用 Grant to get the user's credentials. You can check out how the OAuth flow for Twitter looks like here.
我在尝试调试时遇到了问题,希望能得到一些帮助。
oauthToken 变量和 curl 命令中的 oauth_token 以及消费者密钥是相同的。
这个 curl 命令有效:
curl --get 'https://api.twitter.com/1.1/account/verify_crn: OAuth oauth_consumer_key="dv5trHvHDrAjIM87Z3KGtJrq5", oauth_nonce="7aec4b5b37ab420d44717387e2f889be", oauth_signature="qm4i0jGOPbbmYkaOFCoJhOfgcd4%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1443690396", oauth_token="71611055-pzDi5UJQXKzdP4kBLceLLwuzel8DKiRjNivlmkCuA", oauth_version="1.0"' --verbose
以下两个没有,而且它们应该具有相同的参数。他们 return
401 - {"errors":[{"code":32,"message":"Could not authenticate you."}
首先尝试 https://www.npmjs.com/package/request#oauth-signing
const oauth={
consumer_key:config.get('twitter.consumerKey'),
token:oauthToken,
}
console.log(oauth);
requestAsync({
url:'https://api.twitter.com/1.1/account/verify_credentials.json',
method:'GET',
oauth,
})
第二次尝试 https://github.com/ciaranj/node-oauth
const oauthToken=req.body.accessToken.split(':')[0];
const oauthTokenSecret=req.body.accessToken.split(':')[1];
console.log(oauthToken+" " + oauthTokenSecret);
const oauth = new OAuth.OAuth(
'https://api.twitter.com/oauth/request_token',
'https://api.twitter.com/oauth/access_token',
config.get('twitter.consumerKey'),
config.get('twitter.consumerSecret'),
'1.0A',
null,
'HMAC-SHA1'
);
oauth.get(
'https://api.twitter.com/1.1/account/verify_credentials.json',
oauthToken,
oauthTokenSecret,
function (e, data, res){
if (e) console.error(e);
console.log(require('util').inspect(data));
});
如 request docs 中所述,您必须提供 4 个必需的 OAuth 参数:
request({
oauth: {
consumer_key: '...',
consumer_secret: '...',
token: '...',
token_secret: '...'
}
})
您可以从 OAuth 应用程序的设置页面获取 consumer_key
和 consumer_secret
。用户的token
和token_secret
可以通过执行OAuth流程得到。
您可以使用 Grant to get the user's credentials. You can check out how the OAuth flow for Twitter looks like here.