Auth0 / userinfo端点返回未经授权的错误

时间:2016-10-04 08:04:02

标签: node.js token access-token auth0

即使我在Node.js应用程序中传递了承载令牌,它也会给出未经授权的结果错误。

    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请求

代码有什么问题吗?

1 个答案:

答案 0 :(得分:4)

根据/userinfo endpoint documentation您应该执行GET HTTP请求而不是POST,此外,您还需要在{{{} {{}}中传递访问令牌1}}标题。

<强>更新

问题在于您如何尝试在授权标头中传递令牌。

您没有提到您作为HTTP客户端使用的内容,但这里有一些使用request-promise作为Node HTTP客户端的示例代码;这很好。

Authorization

更新2:

使用Node.js内置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... 
    });

同样,关键部分是如何在正确的标题中传递令牌。