У меня есть этот ключ jwk, который я хочу преобразовать в pem:
const jwkey = {
kty: 'RSA',
kid: 'eecb0ced-4d49-4100-9547-841e4100b756',
n: '...very long string',
e: 'AQAB',
alg: 'RS256',
use: 'sig',
};
Я пробовал библиотеки, такие как jose, node-rsa и jwk-To-Pem, но почему-то все они терпят неудачу и выдают ошибки здесь и там при настройке.
Я буквально понятия не имею, как его настроить.
ниже приведен пример преобразования node-rsa:
const key = new NodeRSA();
key.importKey(
{
n: Buffer.from(jwkey.n, 'base64'),
e: Buffer.from(jwkey.e, 'base64'),
},
'components'
);
const pem = key.exportKey('pkcs1-private-pem');
Вы можете использовать модуль «jwk-to-pem».
const jwkToPem = require("jwk-to-pem")
const jwkey = {
kty: "RSA",
alg: "RS512",
kid: "26887d3ee3293c526c0e6dd05f122df53aa3f13d7dad06d25e266fa6f51db79fb52422aaf79f121476237e98dcd6640350fee47fec70e783544ec9a36e4605bc",
use: "sig",
n: "14m79mVwIE0JxQdKrgXVf7dVcBS90U0TvG7Yf7dG4NJocz1PNUrKrzGhe_FryOe0JahL_sjA2_rKw7NBCpuVx_zSPFRw6kqjewGicjXGus5Fmlf3zDuqwV4BWIFHyQexMPOly0agFfcM0M0MgBULXjINgBs9MwnRv7JVfRoGqXHsNM45djFDd3o4liu4LPlge_DquZUFLNu-BYAyAlWkz0H2TepZhGrN9VEPmxzQkNzXc1R4MpZvbxrRRgaAA2z094ik3hk86JhfyFq-LDcueZhtshmrYZ95LWgMlQ7PixkeK1HkeEYMt20lmNzR8B8KabimYmibxA4Ay9gpRwfp-Q",
e: "AQAB",
}
console.info("jwkey : ", jwkey)
const pem = jwkToPem(jwkey)
console.info("create pem : ", pem)
Он работает с оператором require, но не с оператором import. Почему это Ошибка: Argument of type '{ kty: string; kid: string; n: string; e: string; alg: string; use: string; }' is not assignable to parameter of type 'JWK'. Type '{ kty: string; kid: string; n: string; e: string; alg: string; use: string; }' is not assignable to type 'RSA'. Types of property 'kty' are incompatible. Type 'string' is not assignable to type '"RSA"'.
Я знаю, что это не главная проблема, но все же...
Я пробовал библиотеки, такие как jose
Следующее всегда будет работать для открытого ключа RSA с использованием jose
.
const jwk = {
kty: 'RSA',
n: 'pksialyL7vdNKFhL9Nu1uVs49L8vKqtRB3O_hSA_bICHKvNLX9_5NtoN1oDV7Mjz_rBOxM3AcnPV97OJPBrHKbQxhX3P5PN0LTqVLh0_Pcn5s7KHRpT1-jhHad5FaeJ2WdBRUhr8cEbVnYvAEmGfB3kduyPGNqSAbJC0PtEEJZlNralFLyJV0wEC1t7a9hRAXXkL52D_UbKnF05Gjn1XioHOKxEjlZirzrj0z8SUHXAD8UPJMAGvzakBRb_K46hcdl8G9_7t3RLjVyGwVwnZOWBZosUU4jOtQx0OZtDEO4rbw4yDMA4cHJs1FCDDsXi_r1tlZ5EKSzU51YDVx3txNQ',
e: 'AQAB'
}
const key = await jose.importJWK({
...jwk,
ext: true,
}, 'RS256')
const pem = await jose.exportSPKI(key)
console.info(pem)
// -----BEGIN PUBLIC KEY-----
// MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApksialyL7vdNKFhL9Nu1
// uVs49L8vKqtRB3O/hSA/bICHKvNLX9/5NtoN1oDV7Mjz/rBOxM3AcnPV97OJPBrH
// KbQxhX3P5PN0LTqVLh0/Pcn5s7KHRpT1+jhHad5FaeJ2WdBRUhr8cEbVnYvAEmGf
// B3kduyPGNqSAbJC0PtEEJZlNralFLyJV0wEC1t7a9hRAXXkL52D/UbKnF05Gjn1X
// ioHOKxEjlZirzrj0z8SUHXAD8UPJMAGvzakBRb/K46hcdl8G9/7t3RLjVyGwVwnZ
// OWBZosUU4jOtQx0OZtDEO4rbw4yDMA4cHJs1FCDDsXi/r1tlZ5EKSzU51YDVx3tx
// NQIDAQAB
// -----END PUBLIC KEY-----
все они терпят неудачу и выдают ошибку тут и там - это бесполезное описание проблемы. Покажите, что именно вы делали и какие ошибки вы получили.