【发布时间】:2019-07-31 03:34:27
【问题描述】:
我正在尝试使用 jsonwebtoken NPM 包来验证 Azure Active Directory 颁发的 JWT 令牌。以下是我写的node.js代码:
var jwt = require('jsonwebtoken');
var token = '<valid JWT token>';
var x5cString = '<x5cSTring>';
var publicKey = '-----BEGIN CERTIFICATE-----\n' + x5cString + '\n-----END CERTIFICATE-----';
var verifiedToken = jwt.verify(token, publicKey) //, verifyOptions);
请注意,在上面的代码中,我使用了来自https://login.microsoftonline.com/common/discovery/keys 的实际 x5c 字符串。这工作正常,我得到了预期的结果。但是,作为公钥的 X5C 字符串一直在变化。我正在尝试了解如何自动获取此公钥。
编辑
我在 Jsonwebtoken NPM 包网站上找到了一些示例代码。在此代码中,signingKey 是我想要的。以下是代码。
var jwksClient = require('jwks-rsa');
var client = jwksClient({
jwksUri: 'https://login.microsoftonline.com/common/discovery/keys'
});
function getKey(header, callback){
client.getSigningKey(header.kid, function(err, key) {
var signingKey = key.publicKey || key.rsaPublicKey;
callback(null, signingKey);
});
}
jwt.verify(token, getKey, options, function(err, decoded) {
console.log(decoded.foo) // bar
});
在上面的代码中,jwt.verify 调用了getKey,它以header 和callback 作为参数。我不明白 jwt.verify 函数如何将 'header' 参数传递给 getKey。以下是我检索到的标题。如何将此标头传递给 jwt.verify 中的 getKey?
var decoded = jwt.decode(token, {complete: true});
var header = decoded.header
【问题讨论】: