'An error occurred while trying to authenticate: Failed to validate signature.' While using `oauth-1.0a` and nodejs

137 Views Asked by At

I'm getting this odd error in nodejs when I try to send a post request with oauth-1.0a and node.js.

Request:

Headers:
Authorization: OAuth <...>
Accept: 'application/xml',
Content-Type: 'application/xml'

Body:
<account>
    <firstName>${first}</firstName>
    <lastName>${last}</lastName>
    <email>${email}</email>
    <urlRedirect>${redirecturl}</urlRedirect>
</account>`

Response:

401
An error occurred while trying to authenticate: Failed to validate signature.

Code:


require('dotenv').config()
const request = require('request')
const OAuth = require('oauth-1.0a')
const crypto = require('crypto')
var first = "real";
var last = "person";
var email = "[email protected]";
var redirecturl = "http://google.com"
const oauth = OAuth({
    version: '1.0a',
    consumer: {
        key: process.env.CONSUMERKEY,
        secret: process.env.CONSUMERSECRET,
    },
    signature_method: 'HMAC-SHA1',
    hash_function(base_string, key) {
        return crypto
            .createHmac('sha1', key)
            .update(base_string)
            .digest('base64')
    },
})
console.log(oauth)
const token = {
    key: process.env.KEY,
    secret: process.env.SECRET,
}
const request_data = {
    url: `https://${process.env.CHURCHCODE}.fellowshiponeapi.com/v1/Accounts`,
    method: 'POST',
    data: `<account>
    <firstName>${first}</firstName>
    <lastName>${last}</lastName>
    <email>${email}</email>
    <urlRedirect>${redirecturl}</urlRedirect>
  </account>`
}
const headers = Object.assign( oauth.toHeader(oauth.authorize(request_data, token)), {
    Accept: 'application/xml',
    'Content-Type': 'application/xml'
});
console.log(headers); 
request(
    {
        url: request_data.url,
        method: request_data.method,
        headers: headers
    },
    function(error, response, body) {
        console.log(response.statusCode)
        console.log(response.statusMessage)
     }
)

Why is this error occurring?

Edit: one of the more useful resources I used was this: https://oauth.net/core/1.0/#signing_process but I still can't figure this out.

Should also mention that this request does work, as in postman it successfully goes through.

1

There are 1 best solutions below

3
Tore Nestenius On

You typically want to provide the token in a request using this header:

Authorization: Bearer <token>

Not

Authorization: OAuth <...>