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