Node.js 中的 OAuth1.0 标头

Ped*_*oSG 7 javascript api oauth node.js axios

我一直在通过使用 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"'
Run Code Online (Sandbox Code Playgroud)

我的问题与oauth_nonceoauth_signature 有关。我可以用来生成这两个参数的哈希函数是什么。
另外,我正在使用AXIOS进行请求。
谢谢你的时间。

Gre*_*orp 13

我能够用 Axios 找出解决方案。我创建了一个 OauthHelper 类来生成Authorization标题:

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;
Run Code Online (Sandbox Code Playgroud)

然后我就可以通过 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 });
Run Code Online (Sandbox Code Playgroud)