网站登陆JWT的实现


一、关于jwt

  • JWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。web

  • JWT的声明通常被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。好比用在用户登陆上。算法

二、jwt的构成

第一部分咱们称它为头部(header),第二部分咱们称其为载荷(payload),第三部分是签证(signature)。json

  1. headerbash

    jwt的头部承载两部分信息:服务器

    • 声明类型,这里是jwt网络

    • 声明加密的算法 一般直接使用 HMAC SHA256加密

完整的头部就像下面这样的JSON:spa

{

    typ: "JWT",

    alg: "HS256"

}

复制代码
  1. playloadcode

    载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品,这些有效信息包含三个部分jwt

    • 标准中注册的声明

    • 公共的声明

    • 私有的声明

  2. signature

    jwt的第三部分是一个签证信息,这个签证信息由三部分组成:

    • header (base64后的)

    • payload (base64后的)

    • secret

      这个部分须要base64加密后的header和base64加密后的payload使用.链接组成的字符串,而后经过header中声明的加密方式进行加盐secret组合加密,而后就构成了jwt的第三部分:

      49UF72vSkj-sA4aHHiYN5eoZ9Nb4w5Vb45PsLF7x_NY

      密钥secret是保存在服务端的,服务端会根据这个密钥进行生成token和验证,因此须要保护好。

相对来讲一个完整的jwt token信息的总体结构为:

header (base64)+payload (base64)+Signature 
复制代码

3. jwt 的实现

代码实现:

// jwt 登陆,config.seret 为设置的服务器密钥
// exp: 为token的有效期
// name: 这里是包含的用户信息,能够任意配置
var token = jwt.sign({
    exp: Math.floor(Date.now() / 1000) + 60*60*24,
    name: data.person,
    ....
}, config.secret, function(err, token) {
    res.json({
        msg: {
            status: 1,
            msg: "登陆成功"
        },
        data: {
            token: token,
        }
    })
});

// 验证jwt
new Promise(function(resolve, reject) {
    jwt.verify(token, config.secret, function(err, decoded) {
        if (err) {
            res.json({
                ok: 0,
                msg: err
            })
        } else {
            // 若是验证成功的话这里作相应的后台数据处理
        }
    });
});

复制代码

参考连接: jwt官网

相关文章
相关标签/搜索