node.js - Auth0/userinfo 端点返回未经授权的错误

标签 node.js token access-token auth0

即使我在 Node.js 应用程序中传递不记名 token ,它也会给出未经授权的结果错误。

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

代码有问题吗?

最佳答案

根据/userinfo endpoint documentation你应该执行GET HTTP 请求而不是 POST此外,您需要在 Authorization 中传递访问 token header 。


更新:

问题在于您如何尝试在授权 header 中传递 token 。

您没有提到您使用什么作为 HTTP 客户端,但这里有一些使用 request-promise 的示例代码作为 Node 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... 
    });

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

同样,重要的部分是如何在正确的 header 中传递 token 。

关于node.js - Auth0/userinfo 端点返回未经授权的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39847183/

相关文章:

javascript - Node.js | MongoDB 计数() : Getting Count Before and After Inserting Data

php - ownCloud 使用短期 token 或类似文件共享文件?

string - Facebook API图形的语法错误-帮助要求

authentication - 如果 JWT 被盗怎么办?

node.js - 查看 NodeJs 版本并已安装

javascript - 使用node.js读写文件(JSON)

node.js - 在哪里可以找到 NodeJS Firebase Admin SDK 的所有错误返回代码?

go - 如何提取和验证从前端发送的 token

php - 生成的 CSRF token 太多(PHP),我该如何处理?

android - 如果已经从 Android 中的 FB SDK 获得访问 token ,如何在 WebView 中登录 facebook