Я пытаюсь проверить и декодировать веб-токен JSON с помощью jsonwebtoken НПМ, используя следующий фрагмент кода:jsonwebtoken проверить не удается, когда тайна прямо предусмотрено в программе
var jwt = require('jsonwebtoken');
var fs = require('fs');
var encoded = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjEiLCJsb2dpbklkIjoicm9vdCIsInVzZXJOYW1lIjoicm9vdCIsInJvbGUiOiIwIiwic3RhdHVzIjoiMSIsInBhc3N3b3JkIjoiYWNiM2UxNDFkODgzMTA2ZGUyZjMwZDQ2ZTc2YzA5Y2YiLCJuYW1hayI6InJvb3QiLCJsYXN0TG9naW5UaW1lIjoibnVsbCIsImVtYWlsIjoicm9vdEBlY3AuY29tdml2YS5jb20iLCJjb250YWN0Tm8iOiIwMTIzNDU2Nzg5IiwiYXV0aFR5cGUiOiJudWxsIiwicGFyZW50SWQiOiJudWxsIiwibGFuZ3VhZ2UiOiJudWxsIiwiY3VycmVuY3kiOiJudWxsIiwiYWN0aXZhdGlvbkR0IjoibnVsbCIsImV4cGlyeUR0IjoibnVsbCIsImRlbGV0ZWRBdCI6Im51bGwiLCJwZXJtcyI6IntcIiVcIjo3fSIsImJhbGFuY2UiOiIxMjk5IiwiY2FjaGVkIjp0cnVlLCJpYXQiOjE0NTcxMDA5MjZ9.yn2Vb3hE7BKrXntCa-pTVAS7MwsaHD1csPZMiibOhwk';
fs.readFile('/etc/jwt/shared.key', function(err, result){
if (err) {
console.error("error:", err);
return;
}
var verified = jwt.verify(encoded, 'ssshhhh');
//var verified = jwt.verify(encoded, result);
console.log("verified:", verified);
});
Когда я пытаюсь jwt.verify(), используя жёстко прописанное значение, программа не
if (err) throw err;
^
JsonWebTokenError: invalid signature
at Object.JWT.verify (/home/rvnath/projects/comviva/mbs/ecp7/dev/authserver/node_modules/jsonwebtoken/index.js:219:17)
at /home/rvnath/projects/comviva/mbs/ecp7/dev/authserver/testverify.js:11:22
at fs.js:334:14
at FSReqWrap.oncomplete (fs.js:95:15)
Однако, если я прочитал секретный файл ключа (вместо жесткого кодирования) и предложение на функцию проверки, она работает правильно. Вот выход из программы в этом случае:
[email protected] ~/projects/comviva/mbs/ecp7/dev/authserver $ node testverify.js
verified: { id: '1',
loginId: 'root',
userName: 'root',
role: '0',
status: '1',
password: 'acb3e141d883106de2f30d46e76c09cf',
namak: 'root',
lastLoginTime: 'null',
email: '[email protected]',
contactNo: '',
authType: 'null',
parentId: 'null',
language: 'null',
currency: 'null',
activationDt: 'null',
expiryDt: 'null',
deletedAt: 'null',
perms: '{"%":7}',
balance: '1299',
cached: true,
iat: 1457100926 }
Мой секретный файл представляет собой простой текстовый файл, как показано ниже:
[email protected] ~ $ cat /etc/jwt/shared.key
ssshhhh
[email protected] ~ $
В заключение, я пытаюсь расшифровать, используя ту же тайну ключ, сохраненный в файле /etc/jwt/shared.key, но он не работает, когда значение ключа жестко запрограммировано в программе. Что я здесь делаю неправильно?
Редактировать JWT генерируется с помощью моего приложения сервера, читая тайну из того же файла:
/** Creates a signed JSON WEB TOKEN **/
function createJWT(user) {
return fs.readFileAsync('/etc/jwt/shared.key').then(function(cert){
var secret = cert.toString();
console.log("shared secret:", secret);
var token = jwt.sign(user, secret);
//console.log("token verification:",jwt.verify(token, cert));
return token;
});
}