jwt生成token全 - node

cnpm install jsonwebtoken

基本使用

签名方法

jwt.sign(payload, secretOrPrivateKey, [options, callback])

payload 是一个json对象或者是一个可以json化的buffer或字符串 这里的信息都是可以使用jwt.verify()方法拿到的.

secretOrPrivateKey 是加密的key密匙.

const jwt = require('jsonwebtoken')let token = jwt.sign({user: '1234'}, 'Fizz', {expiresIn: 60 * 60});
console.log(token)

解析验证方法

jwt.verify(token, secretOrPublicKey, [options, callback])

token: 就是token字符串 由jwt.sign()方法生成的

secretOrPublicKey:是加密的key,用于解析生成token时的payload参数

options: 设置一些解密的方法…

jwt.verify(token, 'Fizz', function (err, data) {if (err) console.log(err)console.log('解析的数据', data)})
一些方法
sign(payload,secret, {expiresIn:60*60*24})
// 授权时效24小时
//第三个参数是token的过期时间可以不设置

具体

JWT 标准的 Token 有三个部分:
header(头部)
payload(数据)
signature(签名)

中间用点分隔开,并且都会使用 Base64 编码

header 头部

里面包含加密类型以及签名所用的算法等。例如下面:

{
  "alg": "HS256",
  "typ": "JWT"
}

alg 属性表示签名的算法(algorithm),默认是HMAC SHA256(写成 HS256);
typ属性表示这个令牌(token)的类型(type),
JWT 令牌统一写为JWT。
最后,将上面的 JSON 对象使用 Base64URL 算法转成字符串。

Payload

Payload 部分是一个 JSON 对象,用来存放实际需要传递的数据。JWT 规定了7个官方字段:
iss (issuer) :签发人
exp (expiration time) :过期时间
sub (subject) :主题
aud (audience):受众
nbf (Not Before) :生效时间
iat (Issued At) :签发时间
jti (JWT ID) :编号
exp (expiration time) :过期时间 会常用到。里面还能定义私有字段。而且默认是不加密的,任何人都可以读到,所以不要把秘密信息放在这个部分。也使用 Base64URL 算法转成字符串。

Signature

首先,需要指定一个密钥(secret)。这个密钥只有服务器才知道。然后,使用 Header 里面指定的签名算法(默认是 HMAC SHA256),按照下面的公式产生签名。
HMACSHA256(
base64UrlEncode(header) + “.” +
base64UrlEncode(payload),
secret)
算出签名以后,把 Header、Payload、Signature 三个部分拼成一个字符串,每个部分之间用"点"(.)分隔,就可以返回给用户。

const jwt = require("jsonwebtoken");

const secret = "aaabbbfadwesooweiiaf";

function createToken(payload){
    payload.rtiem = new Date();
    payload.exp = 60 * 60 * 2 *1000;
    return jwt.sign(payload,secret);
}

function checkToken(token){
    return new Promise((resolve,reject)=>{
        jwt.verify(token,secret,(err,res)=>{
            if(!err) {
                resolve(res)
            }else{
                reject("token验证失败");
            }
        })
    })
}
module.exports = {
    createToken,checkToken
}

使用

//登录有效期和token的正确性验证
app.get('/list', function(req, res) {
    checkToken(req.headers.Authorization).then(res=>{
            //token验证成功
            //判断过期时间
        }).catch(err=>{
            res.json({{err:-1,msg:'token非法'}})
        })
});
if(){
    let token = createToken({username:req.query.name});
    res.json({err:0,msg:'OK',token});
}else{
    res.json({err:-1,msg:'fail'});
}

jwt项目实践:
后面补充

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值