Ujjual
Ujjual

Reputation: 998

Nodejs .Unable to send oauth v1 params in get request with axios

I wanted to make a request to ADP with autho1.0a I was able to make successful requests as I wanted in postman but not through my application. postman screenshot

npm module used

similar post

Code I tried Part:1 Signature generation

const crypto = require('crypto')
const OAuth = require('oauth-1.0a')

const oauthObj = {};
function hash_function_sha1(base_string, key) {
    return crypto
        .createHmac('sha1', key)
        .update(base_string)
        .digest('base64')
}
oauthObj.getSignature = async payload => {
    const { consumerKey,consumerSecret,apiUrl,method} = payload;
    const oauth = OAuth({
        consumer: { key: `${consumerKey}`, secret: `${consumerSecret}` },
        signature_method: 'HMAC-SHA1',
        hash_function: hash_function_sha1,
    });
    const request_data = {
        url: `${apiUrl}`,
        method: `${method}`
    }
    const token = {}
    // return oauth.toHeader(oauth.authorize(request_data, token));
    console.log('header string-----',oauth.toHeader(oauth.authorize(request_data, token)));
    return oauth.authorize(request_data, token);
 }
module.exports = oauthObj;

Part 2 : Axios Call

let oauthData=`oauth_consumer_key=${consumerKey}&oauth_signature_method=HMAC-SHA1&oauth_timestamp=${oauthTimestamp}&oauth_nonce=${oauthNonce}&oauth_version=1.0&oauth_signature=${oauthSignature}= HTTP/1.1`;
        const eventData = await axios({
            url:`${apiUrl}?${oauthData}`,
            // url:`${apiUrl}?${oauthHeader.Authorization}`,
            method:'GET',
            headers:{
                // ...oauthHeader,
                'Authorization':'OAuth',
                'Accept': 'application/json',
                // "Authorization": `'OAuth oauth_consumer_key="${consumerKey}", oauth_nonce="${oauthNonce}", oauth_signature="${oauthSignature}", oauth_signature_method="HMAC-SHA1", oauth_timestamp="${oauthTimestamp}", oauth_version="1.0"`
            }
        });

Expected Result:

{
    "code": "Gone",
    "message": "Event with token 954c183f-26e0-4f9e-b452-c089aaf9842f has already been consumed."
}

Receiving error:

response: {
    status: 401,
    statusText: 'Unauthorized',
    headers: {

What might have gone wrong ?

Upvotes: 1

Views: 1314

Answers (1)

Lal Pratheesh S S
Lal Pratheesh S S

Reputation: 116

Try using request node package oauth option

request.get(`${apiUrl}?${oauthData}`, {
    oauth: {
        consumer_key: '..',
        consumer_secret: '..',
    },
    headers: {
        Accept: 'application/json'
    },
}, function (err, res, body) {
    console.log(body);
})

Upvotes: 1

Related Questions