nodejs基於Token的身份認證

2021-10-06 22:40:10 字數 2962 閱讀 8348

起初的驗證方式是存在於伺服器的,使用者登入進來以後,伺服器判斷成功,將資料存進session裡面,向使用者返回乙個sessionid。這樣的弊端是,假如使用者基數特別大,每登入乙個使用者,就要儲存一條,對伺服器的記憶體壓力比較大。

基於token的驗證方法是無狀態的,因此我們就不用把資訊存在伺服器中了。

token可以通過請求頭傳輸,所以他可以在任何一種http請求中被傳送到伺服器中。

token的驗證流程

客戶端傳送使用者、密碼到伺服器。

伺服器接收到資訊之後和資料庫進行比對,驗證成功後,生成一段有時效的token字串,向客戶端返回登陸成功資訊以及token字串。

客服端接收到資訊,將token儲存在local storage或者cookies中。

客服端再向伺服器傳送請求時,將token放在請求頭中。

伺服器先解析請求頭中的token,如果解析成功,那麼就進入業務邏輯中,如果不成功返回錯誤資訊。

首先安裝 jsonwebtoken

npm install jsonwebtoken -s

然後在伺服器中建立乙個js檔案,可以自行命名,我在這裡命名為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的協議基礎上進行擴充套...