用户登录后的凭证大多都用JWT(Json Web Token)下面用Node.js实现签名和验签。
var jwt = require('jsonwebtoken');
var fs = require('fs');
var cert = fs.readFileSync('rsa_private_key.pem');
var token = jwt.sign({userId:'123123',date:12313123},cert,{algorithm:'RS256'});
console.log(token);
var pubCert = fs.readFileSync('rsa_public_key.pem');
jwt.verify(token,pubCert,{algorithms:['RS256']},function (err,payload){
console.log(err,payload);
});
生成pem 类型的秘钥对命令如下
#先生成私钥
openssl genrsa -out rsa_private_key.pem 4096
#格式换成pkcs8
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
#生成对应的公钥
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
最主要的就是私钥签名,公钥验签的基本思想。
脚本运行结果
null { userId: '123123', date: 12313123, iat: 1524814012 }
其中iat 是签名的时间戳,所以如果没有其他特殊必要不用在验证信息里面显式添加签名时间。
网友评论