我一直在通过 postman 成功使用OAuth1.0来使用API。
现在,我正在构建一个调用此API的API,但是在尝试设置OAuth1.0的javascript中的等效项时遇到了麻烦。
标题看起来像这样:
'Authorization': 'OAuth oauth_consumer_key="XXX",oauth_token="XXX",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1559312415",oauth_nonce="XXX",oauth_version="1.0",oauth_signature="XXX"'
我的问题与 oauth_nonce 和 oauth_signature 有关。
我可以用来生成这两个参数的哈希函数是什么。
另外,我正在使用AXIOS进行请求。
谢谢你的时间。
最佳答案
我能够用Axios找出解决方案。我创建了一个OauthHelper类来生成Authorization
header :
const crypto = require('crypto');
const oauth1a = require('oauth-1.0a');
const CONSUMERKEY = '<consumerKey>';
const CONSUMERSECRET = '<consumerSecret>';
const TOKENKEY = '<tokenKey>';
const TOKENSECRET = '<tokenSecret>';
class Oauth1Helper {
static getAuthHeaderForRequest(request) {
const oauth = oauth1a({
consumer: { key: CONSUMERKEY, secret: CONSUMERSECRET },
signature_method: 'HMAC-SHA1',
hash_function(base_string, key) {
return crypto
.createHmac('sha1', key)
.update(base_string)
.digest('base64')
},
})
const authorization = oauth.authorize(request, {
key: TOKENKEY,
secret: TOKENSECRET,
});
return oauth.toHeader(authorization);
}
}
module.exports = Oauth1Helper;
然后我就可以通过Axios在任何需要的地方发布帖子:
const request = {
url: 'https://api-domain.com',
method: 'POST',
body: {
"uniqueId": 1234
}
};
const authHeader = Oauth1Helper.getAuthHeaderForRequest(request);
return await axios.post(
request.url,
request.body,
{ headers: authHeader });