2016-10-04 2 views
1

Es gibt nicht autorisierte als Ergebnis Fehler, auch wenn ich das Bearer-Token in Node.js-Anwendung übergeben.Der Auth0/Benutzerinfo-Endpunkt gibt einen nicht autorisierten Fehler zurück

function getUser(authData){ 
     var postData = querystring.stringify({ authorization: authData }); 

     var options = { 
     host: 'pole.auth0.com', 
     method: 'GET', 
     path: '/userinfo' 
     }; 

     //make request 
     httpsRequest(postData, options) 
     .then(function(result) { 
      // success 
      res.status(201).send({ 'success': true }); 
     }, function(err) { 
      res.status(500).send({ 'success': false, 'reasonCode': "Internal error." }); 
     }); 
    }; 

Helper Funktion:

function httpsRequest (data, options) { 
    return new Promise(function (resolve, reject) { 
     var req = https.request(options, function (res) { 
      var result = ''; 
      console.log(options); 
      res.on('data', function (chunk) { 
       result += chunk; 
      }); 
      res.on('end', function() { 
       console.log("https end result - " + result); 
       resolve(result); 
      }); 
      res.on('error', function (err) { 
       reject(err); 
      }) 
     }); 

     // req error 
     req.on('error', function (err) { 
      reject(err); 
     }); 

     //send request witht the postData form 
     req.write(data); 
     req.end(); 
    }); 
} 

Der authData Parameter einen String-Wert wie Bearer [token] hat. Ich benutze https.request, um die API-Anfrage zu machen

Gibt es etwas falsch am Code?

Antwort

4

Nach dem /userinfoendpoint documentation Sie sollten eine GET HTTP-Anforderung anstelle eines POST aufführen und zusätzlich benötigen Sie den Zugriffstoken im Authorization Header zu übergeben.


Update:

Das Problem besteht darin, wie Sie versuchen, die Token in dem Autorisierungsheader zu übergeben.

Sie haben nicht erwähnt, was Sie als HTTP-Client verwendet haben, aber hier ist ein Beispielcode, der request-promise als Knoten-HTTP-Client verwendet; das funktioniert gut.

var rp = require('request-promise'); 

var options = { 
    uri: 'https://[YOUR_TENANT].auth0.com/userinfo', 
    headers: { 
     'Authorization': 'Bearer [YOUR_ACCESS_TOKEN]' 
    } 
}; 

rp(options) 
    .then(function (info) { 
     console.log('User information:', info); 
    }) 
    .catch(function (err) { 
     // API call failed... 
    }); 

Update 2:

Mit Node.js integrierten HTTP-Client:

const https = require('https'); 

var options = { 
    hostname: '[YOUR_TENANT].auth0.com', 
    port: 443, 
    path: '/userinfo', 
    method: 'GET', 
    headers: { 
     'Authorization': 'Bearer [YOUR_ACCESS_TOKEN]' 
    } 
}; 

var req = https.request(options, (res) => { 
    res.on('data', (d) => { 
     process.stdout.write(d); 
    }); 
}); 
req.end(); 

req.on('error', (e) => { 
    console.error(e); 
}); 

Auch hier der entscheidende Teil ist, wie das Token in das passieren korrekter Header

+0

Ich habe versucht mit GET HTTP-Anfrage und übergab die Autorisierung Header und noch immer gleichen Fehler – kohli

+0

Aktualisieren Sie Ihre Frage mit dem genauen Code (mit Ausnahme von sensiblen Daten), die Sie verwenden, um die "GET" Anfrage durchzuführen. –

+0

Antwort aktualisiert, Sie müssen das Token korrekt als Autorisierungsheader übergeben. –

Verwandte Themen