Я вижу, как создавать зашифрованные JWT HMAC 256 в NodeJS, используя Crypto и библиотеку jsonwebtoken. Это довольно просто
//encrypt & sign with HS256
const jwt = require('jsonwebtoken');
const pass = crypto.randomBytes(256).toString('hex');
const A = {algorithm:'HS256'};
const token = jwt.sign({ foo: 'bar' }, pass, A);
//decrypt & verify
jwt.verify(token, pass, A, function(err, decoded)
{
console.log('decode ',decoded);
console.log('err ',err);
res.send({error:err, text:decoded});
});
Я хотел бы заменить 'pass' на 'RSA 256 SHA', а A на {алгоритм: 'RS256'}
В документации узла crypto JS я вижу команду
const sign = crypto.createSign('RSA-SHA256');
для создания rsa-sha256
Однако тогда в документации есть функция
getPrivateKeySomehow()
Что не определено или является частью crypto.getPrivateKeySomehow ()
Так что, мне кажется, мне просто нужна помощь в получении строки RSA-SHA-256, возвращаемой из crypto, чтобы я мог передать ее в jsonwebtoken, чтобы подписать мой JWT.
Примечание: Я не хочу читать private.key из статического файла на моем сервере, потому что я считаю, что иметь один закрытый ключ для всех моих пользователей слишком большой угроза безопасности, поэтому я создаю собственные 256-байтовые пароли и храню их вне сайта (не включены в этот пост)
Кроме того, я не уверен, что мне следует делать что-то подобное (не используя что-то вроде openssl из командной строки?)
const begin = '-----BEGIN RSA PRIVATE KEY-----\n';
const enc = crypto.randomBytes(256).toString('base64') + '\n';
const end = '-----END RSA PRIVATE KEY-----'
const pass = sign.sign(begin + enc + end);
const A = {algorithm:'RS256'};
const token = jwt.sign({ foo: 'bar' }, pass, A);