在程序中直接提供密码时,jsonwebtokenvalidation失败

我正在尝试使用jsonwebtoken npmvalidation和解码一个json Web令牌,使用下面的代码片段:

var jwt = require('jsonwebtoken'); var fs = require('fs'); var encoded = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI.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) 

但是,如果我读取密钥文件(而不是硬编码)并提供给validation函数,它将正常工作。 这里是程序的输出:

 rvnath@rv ~/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: 'root@ecp.ecp.com', contactNo: '0123456789', authType: 'null', parentId: 'null', language: 'null', currency: 'null', activationDt: 'null', expiryDt: 'null', deletedAt: 'null', perms: '{"%":7}', balance: '1299', cached: true, iat: 1457100926 } 

我的秘密文件是一个简单的文本文件,如下所示:

 rvnath@rv ~ $ cat /etc/jwt/shared.key ssshhhh rvnath@rv ~ $ 

总之,我试图通过使用与文件/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; }); } 

这是一个愚蠢的小问题,但花了很多时间才发现。 当从文件读取秘密时,它将一个LF(换行符)char附加到string。 所以,当相同的秘密是硬编码的时候,没有LF。 这解释了差异。