[英]The Auth0 /userinfo endpoint returns an unauthorized error
即使我在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請求
代碼有什么問題嗎?
根據/userinfo
端點文檔,您應該執行GET
HTTP請求而不是POST
,此外,還需要在Authorization
標頭中傳遞訪問令牌。
更新:
問題在於您如何嘗試在授權標頭中傳遞令牌。
您沒有提到用作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);
});
同樣,至關重要的部分是如何在正確的標頭中傳遞令牌。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.