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
 
posted @ 2021-10-20 10:22  13522679763-任国强  阅读(319)  评论(0)    收藏  举报