【发布时间】:2021-06-03 20:49:26
【问题描述】:
我正在尝试使用 jwks-rsa 和 jsonwebtoken 解码 JWT id_token,但结果返回为 undefined。
我知道这与回调有关,而且我需要等待来自 getKey 函数的响应,但我不知道如何构建代码来实现这一点。
这就是我目前所拥有的......
function do_thing(properties, context) {
const id_token = "REDACTED";
// Verify using getKey callback
var jwksClient = require('jwks-rsa');
var client = jwksClient({
jwksUri: 'https://REDACTED.com/.well-known/jwks.json'
});
function getKey(header, callback) {
client.getSigningKey(header.kid, function(err, key) {
var signingKey = key.publicKey || key.rsaPublicKey;
callback(null, signingKey);
});
}
var jwt = require('jsonwebtoken');
jwt.verify(id_token, getKey, { algorithms: ['RS256'] }, function(err, decoded) {
if (err) {
console.log(err);
} else {
return decoded;
}
});
const bubble_obj = do_thing();
console.log(bubble_obj); //This is `undefined`
console.log(bubble_obj); 输出为undefined。
我知道上述代码的问题是由于回调和异步代码的性质,因为如果我将 console.log 移动到 jwt.verify 调用中,它将显示正确解码的令牌。
查看这里的例子...
function do_thing(properties, context) {
const id_token = "REDACTED";
// Verify using getKey callback
var jwksClient = require('jwks-rsa');
var client = jwksClient({
jwksUri: 'https://REDACTED.com/.well-known/jwks.json'
});
function getKey(header, callback) {
client.getSigningKey(header.kid, function(err, key) {
var signingKey = key.publicKey || key.rsaPublicKey;
callback(null, signingKey);
});
}
var jwt = require('jsonwebtoken');
jwt.verify(id_token, getKey, { algorithms: ['RS256'] }, function(err, decoded) {
if (err) {
console.log(err);
} else {
console.log(decoded); //When moved here, it prints the correctly decoded token
return decoded;
}
});
const bubble_obj = do_thing();
那么如何让它返回正确解码的令牌?
【问题讨论】:
标签: javascript node.js jwt