文章2
編碼:乙個token是一串base64字元,大概分成head、payload、sign三部分,這三部分以.分割。其中head記錄的是加密演算法,payload記錄的是你定義的一些資訊,sign則是head(base64字元
) + payload(base64字元
) + 秘鑰的加密base64字元。
解碼:在payload儲存過期時間,解碼時判斷是否過期。head(base64字元) + payload(base64字元) + 秘鑰再加密看是否等於sign,不等於則被改動過。
首先準備兩個轉換base64字元的函式
簽名加密函式// 普通字元轉base64字元
function tobase64(str)
// base64字元轉普通字元
function frombase64(str)
token生成函式函式引數設計:const crypto = require('crypto');
/** * @param str 要加密的字串
* @param jwtsecretkey 秘鑰
* @method 簽名
*/function sign(str, jwtsecretkey)
解析token函式/**
* @param payload 自定義資訊
* @param jwtsecretkey 秘鑰
* @param options 其他選項
* @method 生成token
*/function encode(payload, jwtsecretkey, options)));
// token資訊內容部分,自定義的資訊
payload.iat = date.now(); //token生成時間
payload.exp = date.now() + options.maxage; //token過期時間
let payloadpart = tobase64(json.stringify(payload));
// token簽名部分
let signpart = sign(`$.$`, jwtsecretkey);
return `$.$.$`;
}
這裡我就不使用任何框架了,直接用node.js原生擼,前台則使用postman測試。/**
* @param token 前台傳來的token
* @param jwtsecretkey 秘鑰
* @method 解析token
* @return 返回布林值
*/function decode(token, jwtsecretkey).$`, jwtsecretkey) !== signpart) return false;
return true;
}
// jwt秘鑰
// 前台登入
if(pathname === '/login'))
req.on('end', () => , jwtsecretkey, );
res.end(json.stringify(
}))}})}
}).listen(8888, () => )
用postman請求
// jwt秘鑰
// 前台登入
if(pathname === '/login'))
req.on('end', () => , jwtsecretkey, );
res.end(json.stringify(
}))}
})}else if(pathname === '/home')))
}else
}}).listen(8888, () => )
如果token驗證錯誤
如果token驗證通過
jwt原理及使用
jwt json web token 在後台認證時使用 1 不需要後台儲存session資訊,僅占用一點計算資源 2 後端接入伺服器平行擴充套件時,不用考慮認證的平行擴充套件問題 jwt由三部分組成 頭,資訊體,簽名。頭 描述加密演算法和令牌型別 jwt 資訊體 是json欄位,jwt定義了幾個通用...
使用NodeJS實現JWT原理
jwt是json web token的簡稱,本文介紹它的原理,最後後端用nodejs自己實現如何為客戶端生成令牌token和校驗token 我們用nodejs為前端或者其他服務提供resful介面時,http協議他是乙個無狀態的協議,有時候我們需要根據這個請求的上下獲取具體的使用者是否有許可權,針對...
JWT實現過程及應用
使用者登入,返回給客戶端token 服務端不儲存 使用者帶著token,服務端拿到token再校驗 1,提交使用者名稱和密碼給服務端,如果登陸成功,jwt會建立乙個token,並返回 第一段 header,內部包含 演算法 token型別 json轉化字串做base64url加密,可反解 第二段 p...