1

J'essaie actuellement de développer une application de nœud qui consomme l'API DeviantArt.Demande OETH2 GET avec le jeton d'accès renvoie 403 dans NodeJS

Toutes les demandes doivent passer par Oauth2, donc j'ai décidé d'aller avec client_credentials flux que le code va être tout privé. Donc, une fois que j'ai enregistré mon application dans DeviantArt, j'ai reçu mes ID clientId et clientSecret.

J'utilise package client-oauth2 d'autorisation, le code ressemble à ceci:

const Oauth2 = require('client-oauth2'); 

... 

function auth() { 
    return new Promise((resolve, reject) => { 
    let auth = new Oauth2({ 
     clientId: KEYS.client_id, 
     clientSecret: KEYS.client_secret, 
     accessTokenUri: AUTH_URL, // https://www.deviantart.com/oauth2/token 
     authorizationGrants: ['credentials'] 
    }); 

    auth.credentials.getToken() 
    .then((data) => { 
     resolve({ 
     token: data.accessToken 
     }); 
    }) 
    .catch(reject); 
    }); 
} 

Cela fonctionne à ce jour et je reçois pas mon access_token. Donc, je peux utiliser ce jeton pour effectuer toute demande sur l'API, et il fonctionne en fait par boucle et navigateur avec:

https://www.deviantart.com/api/v1/oauth2/browse/newest?access_token={{access_token}} 

Retour dans mon application nœud J'utilise paquet demande, le code ressemble ceci:

const request= require('request'); 

... 

function getDeviations(token) { 
    return new Promise((resolve, reject) => { 
    request(`https://www.deviantart.com/api/v1/oauth2/browse/newest? 
     access_token=${token}`, (error, response, body) => { 
     if (error || response.statusCode >= 400) { 
     reject({ 
      error, 
      response 
     }); 
     } else { 
     // do things and resolve 
     } 
    }); 
    }); 
} 

Et il retourne 403 Interdit.

J'ai été deux jours à me cogner la tête contre le clavier à la recherche d'une raison pour laquelle il ne retournerait 403 qu'avec un nœud. J'ai cherché des différences dans les demandes de navigateur, boucle et noeud, mais aucune idée du tout ...

Est-ce que quelqu'un sait ce qui pourrait éventuellement se produire?

Répondre

1

Je l'ai ... agent utilisateur truquer les en-têtes ...

function getDeviations(token) { 
    return new Promise((resolve, reject) => { 
    request({ 
     url: `https://www.deviantart.com/api/v1/oauth2/browse/newest? 
     access_token=${token}`, 
     headers: { 
     'User-Agent': 'curl/7.44.0' 
     } 
    }, (error, response, body) => { 
     if (error || response.statusCode >= 400) { 
     reject({ 
      error, 
      response 
     }); 
     } else { 
     // do things and resolve 
     } 
    }); 
    }); 
} 

Je ne peux pas croire que cela fonctionne.