jwt 加密解密
let jwt = { decode(token,secret){ let [header,content,sign] = token.split('.') let h = JSON.parse(this.fromBase64ToString(header)) let c = JSON.parse(this.fromBase64ToString(content))
// 判断 加密后的数据是否一致 if(sign !== this.sign([header,content]).join('.'),secret){ throw new Error('Not Allowd'); } // 判断是否在有效期内 if(ccc.exp && ccc.exp < Date.now()){ throw new Error('expres time'); }
return c }, fromBase64ToString(base64){ return Buffer.from(base64,'base64').toString('utf8') }, toBase64(str){ return Buffer.from(str).toString('base64') }, sign(str,secret){ // 签名 return require('crypto').createHmac('sha256',secret).update(str).digest('base64'); }, encode(payload,secret){ let header = this.toBase64(JSON.stringify({'typ':"JWT",alg:'HS256'})) let content = this.toBase64(JSON.stringify(payload)) // 签名使用 header + . + content let sign = this.sign([header,content].join('.'),secret) // 生成好了签名 return [header,content,sign].join('.') }
}
// export default jwt module.export = jwt