即使我在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请求
代码有什么问题吗?
答案 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...
});
同样,关键部分是如何在正确的标题中传递令牌。