原理
後端不在存儲認證信息,而是在用戶登陸的時候生成一個token,而後返回給前端,前端進行存儲,在須要進行驗證的時候將token一併發送到後端,後端進行驗證
加密的方式:對稱加密和非對稱加密,對稱加密指的是加密解密使用同一個密鑰,非對稱加密使用公鑰和私鑰,加密用私鑰加密,解密用公鑰解密前端
安裝jsonwebtoken npm install jsonwebtoken -S
web
1.生成祕鑰,並以cookie的方式返回前端npm
// 對稱 加密 let _payload = { // 鑰加密的數據 userid: _judge_result[0]._id, username: _judge_result[0].username, level: 8, } let _cert = 'i love u' // 密鑰 var _token = jwt.sign(_payload, _cert); res.cookie('token', _token)//發送cookie
2.再次請求時,後端解密json
var decoded = jwt.verify(req.cookies.token, 'i love u');
生成祕鑰後端
生成私鑰:cookie
ssh-keygen -t rsa -b 2048 -f private.key
生成公鑰併發
openssl rsa -in private.key -pubout -outform PEM -out public.key
1.私鑰加密ssh
// 非對稱加密 let _payload = { // 鑰加密的數據 userid: _judge_result[0]._id, username: _judge_result[0].username, level: 8, } // 取出來私鑰 let _private = fs.readFileSync(PATH.resolve(__dirname, '../keys/private.key')) var _token = jwt.sign(_payload, _private, { algorithm: 'RS256'});//進行加密 res.cookie('token',_token);//發送給前端
2.公鑰解密加密
let _public=fs.readFileSync(PATH.resolve(__dirname,'../keys/public.key'));//獲取公鑰 var decoded = jwt.verify(req.cookies.token,_public, {algorithm: 'RS256'});//公鑰解密