起初的驗證方式是存在於伺服器的,使用者登入進來以後,伺服器判斷成功,將資料存進session裡面,向使用者返回乙個sessionid。這樣的弊端是,假如使用者基數特別大,每登入乙個使用者,就要儲存一條,對伺服器的記憶體壓力比較大。
基於token的驗證方法是無狀態的,因此我們就不用把資訊存在伺服器中了。
token可以通過請求頭傳輸,所以他可以在任何一種http請求中被傳送到伺服器中。
token的驗證流程
客戶端傳送使用者、密碼到伺服器。
伺服器接收到資訊之後和資料庫進行比對,驗證成功後,生成一段有時效的token字串,向客戶端返回登陸成功資訊以及token字串。
客服端接收到資訊,將token儲存在local storage或者cookies中。
客服端再向伺服器傳送請求時,將token放在請求頭中。
伺服器先解析請求頭中的token,如果解析成功,那麼就進入業務邏輯中,如果不成功返回錯誤資訊。
首先安裝 jsonwebtoken然後在伺服器中建立乙個js檔案,可以自行命名,我在這裡命名為
npm install jsonwebtoken -s
jwt.js
// 引入模組依賴
const fs =
require
('fs');
const path =
require
('path');
const jwt =
require
('jsonwebtoken');
// 建立 token 類
class
jwt//生成token
generatetoken()
, exp
}, cert,);
return token;
}// 校驗token
verifytoken()
)||;let
= result, current = math.
floor
(date.
now()/
1000);
if(current <= exp);}
return res;
}catch(e
)}}module.exports = jwt;
jwt.
sign
(payload, secretorprivatekey,
[options, callback]);
payload ==
> 代指要存進的內容
secretorprivatekey ==
> 秘鑰,我這裡使用的是生成的私鑰加密,也可以使用不規則字元。
[options, callback]
==> 引數,包括支援的演算法等等
jwt.
verify
(token, secretorpublickey,
[options, callback]);
token ==
> sign生成的token
secretorpublickey ==
> 使用生成的公鑰解密。
[options, callback]
==> 使用相同的解密方式
可以檢視jsonwebtoken在npm上的詳細解釋
引數值數字簽名或mac演算法
hs256
使用sha-256雜湊演算法的hmac
hs384
使用sha-384雜湊演算法的hmac
hs512
使用sha-512雜湊演算法的hmac
rs256
使用sha-256雜湊演算法的rsassa-pkcs1-v1_5
rs384
使用sha-384雜湊演算法的rsassa-pkcs1-v1_5
rs512
使用sha-512雜湊演算法的rsassa-pkcs1-v1_5
ps256
使用sha-256雜湊演算法的rsassa-pss(only node ^ 6.12.0 or> = 8.0.0)
ps384
使用sha-384雜湊演算法的rsassa-pss(only node ^ 6.12.0 or> = 8.0.0)
ps512
使用sha-512雜湊演算法的rsassa-pss(only node ^ 6.12.0 or> = 8.0.0)
es256
使用p-256曲線和sha-256雜湊演算法的ecdsa
es384
使用p-384曲線和sha-384雜湊演算法的ecdsa
es512
使用p-521曲線和sha-512雜湊演算法的ecdsa
none
不包含數字簽名或mac值
因為我比較喜歡使用cookie來儲存的,所以以cookie為主。
首先使用乙個npm包,js-cookie。
npm install js-cookie -s
在合適的資料夾中建立乙個js檔案。一般推薦在utils資料夾下
import cookies from
'js-cookie'
const tokenname =
'******xx'
export
function
gettoken()
export
function
settoken
(token))}
export
function
removetoken()
以vue來說,按照我之前關於axios的文章,封裝請求即可。
vue.js請求工具axios的封裝
SpringBoot實現基於token的登入驗證
springboot實現基於token的登入驗證 基於token的登入驗證實現原理 客戶端通過使用者名稱和密碼呼叫登入介面,當驗證資料庫中存在該使用者後,將使用者的資訊按照token的生成規則,生成乙個字串token,返回給客戶端,客戶端在呼叫其他介面的時候,需要在請求頭上帶上token,來驗證登入...
Nodejs中token的jwt加密與加密校驗
什麼是tokentoken是服務端 成的 串字串,作為客戶端進 請求的 個令牌。當 戶登入後,伺服器 成 個token返回給客戶端,之後客戶端只需帶上這個token來請求資料即可,需每次都輸 戶名和 密碼來鑑權。token的組成 header playload iss issuer 簽發 exp e...
基於Token的認證和基於宣告的標識
openid解決跨站點的認證問題,oauth解決跨站點的授權問題。認證和授權是密不可分的。而openid和oauth這兩套協議出自兩個不同的組織,協議上有相似和重合的之處,所以想將二者整合有些難度。好在openid connect作為openid的下一版本,在oauth 2.0的協議基礎上進行擴充套...