網站登陸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官網

相關文章
相關標籤/搜索