我使用这个库, 节点jwks-RSA ,来从我auth0 jwks.json文件JWT键,以便验证id_token我的应用程序检索验证后实际上是从我的身份验证提供者的到来。
引擎盖下它使用此方法来建立一个公共密钥PEM
export function certToPEM(cert) {
cert = cert.match(/.{1,64}/g).join('\n');
cert = `-----BEGIN CERTIFICATE-----\n${cert}\n-----END CERTIFICATE-----\n`;
return cert;
}
(使用x50c从.jwks文件参数)。
然后我在组合使用具有jsonwebtoken验证JWT(id_token)是有效的。
如何验证这个方法从生成从jwks.json文件的模量和指数私钥(RSA),并用它来验证,而不是有什么不同? (如实施例看到这个库 )
另外这里是用作示范从一个模数和指数(取自产生PEM http://stackoverflow.com/questions/18835132/xml-to-pem-in-node-js )
export function rsaPublicKeyToPEM(modulusB64, exponentB64) {
const modulus = new Buffer(modulusB64, 'base64');
const exponent = new Buffer(exponentB64, 'base64');
const modulusHex = prepadSigned(modulus.toString('hex'));
const exponentHex = prepadSigned(exponent.toString('hex'));
const modlen = modulusHex.length / 2;
const explen = exponentHex.length / 2;
const encodedModlen = encodeLengthHex(modlen);
const encodedExplen = encodeLengthHex(explen);
const encodedPubkey = '30' +
encodeLengthHex(modlen + explen + encodedModlen.length / 2 + encodedExplen.length / 2 + 2) +
'02' + encodedModlen + modulusHex +
'02' + encodedExplen + exponentHex;
const der = new Buffer(encodedPubkey, 'hex')
.toString('base64');
let pem = `-----BEGIN RSA PUBLIC KEY-----\n`;
pem += `${der.match(/.{1,64}/g).join('\n')}`;
pem += `\n-----END RSA PUBLIC KEY-----\n`;
return pem;
};
上述jsonwebtoken库可以验证使用一个智威汤逊-但为什么呢? 如果这两个验证方法可以验证一个JWT签名为什么他们都存在吗? 什么是他们之间的平衡? 是一个比另一个更安全? 我应该使用哪种验证最全面?