Zhe*_* Ng 4 rsa node.js public-key jwt jwk
我的目标是使用jsonwebtoken verify 方法以 JSON Web Token (JWT) 格式验证我的 id_token ,该方法需要公钥作为第二个参数。我的 Web 应用程序是一个 Node.js 应用程序。
根据Ping ID 的文档,我应该使用指数(e)和模数(n)生成 RSA 公钥。这是适用于我的 id_token 的示例:
{
"kty": "RSA",
"kid": "IlOPtWXUcpiPttmr-K7DmehzeRM",
"use": "enc",
"n": "qv2XCvfUfW0bG547B1xieE0-GN8xLuCdzGcIWsYMP-fn1vR2ptR7XOp_kW-etlxSDT2MVyzdXbG9eQCgeBk-Ajgbyn4AaFScJt9ibGyE-5hUvkSJRTP-jlJjlPniYsKcjEY3C-QzyRcEIHoOHOEuevIFwVvKNRgEVYyx3CmkmIXcfw35R1tORNjCec_NA6dawx_LPpS0endjNz2m_iijLquKenrsKSKVnBprfVtBh_myuNQD5CfhBnzZRmAUfr0PoVMDBb0r_rWaV1Q64zQWSeCql7CSWq4U8RNhogd0eCZOOv45plIUwoxkdNg0Rzkp-OEtKRLaHonJ_OZ_sxa8-w",
"e": "AQAB"
},
Run Code Online (Sandbox Code Playgroud)
问题是,如何使用这些值生成公钥?有没有一个 Node.js 库可以做到这一点?
我是密码学新手,所以请原谅我的初学者问题。
您可以使用节点的 Crypto 模块轻松地将 jwk 转换为公钥(pem),而无需使用外部依赖项。
import crypto from 'crypto';
let publicKey = crypto.createPublicKey({
key: {
"kty": "RSA",
"kid": "IlOPtWXUcpiPttmr-K7DmehzeRM",
"n": "qv2XCvfUfW0bG547B1xieE0-GN8xLuCdzGcIWsYMP-fn1vR2ptR7XOp_kW-etlxSDT2MVyzdXbG9eQCgeBk-Ajgbyn4AaFScJt9ibGyE-5hUvkSJRTP-jlJjlPniYsKcjEY3C-QzyRcEIHoOHOEuevIFwVvKNRgEVYyx3CmkmIXcfw35R1tORNjCec_NA6dawx_LPpS0endjNz2m_iijLquKenrsKSKVnBprfVtBh_myuNQD5CfhBnzZRmAUfr0PoVMDBb0r_rWaV1Q64zQWSeCql7CSWq4U8RNhogd0eCZOOv45plIUwoxkdNg0Rzkp-OEtKRLaHonJ_OZ_sxa8-w",
"e": "AQAB"
}, format: 'jwk'
});
Run Code Online (Sandbox Code Playgroud)
然后您可以使用它来验证 jwt。
let pem = publicKey.export({ type: 'pkcs1', format: 'pem' });
jwt.verify(jwtToken, pem, (err, decoded) => {
})
Run Code Online (Sandbox Code Playgroud)