2016-10-04 3 views
1

Это дает неавторизованную ошибку результата, даже когда я передаю токен-носитель в приложении Node.js.Конечная точка Auth0/userinfo возвращает неавторизованную ошибку

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." }); 
     }); 
    }; 

Вспомогательная функция:

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(); 
    }); 
} 

Параметр authData имеет значение строки, как Bearer [token]. Я использую https.request, чтобы сделать запрос api

Есть ли что-то не так в коде?

ответ

4

Согласно /userinfoendpoint documentation вы должны выполнять запрос GET HTTP вместо POST и, кроме того, вы должны передать маркер доступа в заголовке Authorization.


Update:

Проблема заключается в том, что вы пытаетесь передать маркер в заголовке авторизации.

Вы не упомянули, что используете в качестве HTTP-клиента, но вот пример кода с использованием request-promise в качестве HTTP-клиента узла; это прекрасно работает.

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:

С Node.js встроенный HTTP клиента:

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); 
}); 

Опять же, жизненно важной частью на том, как передать маркер в правильный заголовок.

+0

Я попытался использовать запрос GET HTTP и передал заголовок авторизации, а также ту же ошибку. – kohli

+0

Обновите свой вопрос с помощью точного кода (за исключением любых конфиденциальных данных), который вы используете для выполнения запроса 'GET'. –

+0

Ответ обновлен, вам необходимо правильно передать токен в качестве заголовка авторизации. –

 Смежные вопросы

  • Нет связанных вопросов^_^