2016-03-04 3 views
2

Я пытаюсь проверить и декодировать веб-токен 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; 
    }); 
} 

ответ

0

Это был глупый тривиальный вопрос, но потребовалось много времени, чтобы выяснить, , Когда секрет был прочитан из файла, он добавлял символ LF (linefeed) к строке. Итак, когда тот же секрет был жестко закодирован, он был без LF. Это объясняет разницу.

Смежные вопросы