node實現基於token的身份驗證

2021-08-18 07:07:59 字數 2355 閱讀 2240

最近研究了下基於token的身份驗證,並將這種機制整合在個人專案中。現在很多**的認證方式都從傳統的seesion+cookie轉向token校驗。對比傳統的校驗方式,token確實有更好的擴充套件性與安全性。

由於http是無狀態的,它並不記錄使用者的身份。使用者將賬號與密碼傳送給伺服器後,後台通過校驗,但是並沒有記錄狀態,於是下一次使用者的請求仍然需要校驗身份。為了解決這一問題,需要在服務端生成一條包含使用者身份的記錄,也就是session,再將這條記錄傳送給使用者並儲存在使用者本地,即cookie。接下來使用者的請求都會帶上這條cookie,若客戶端的cookie與服務端的session能對應上,則說明使用者身份驗證通過。

流程大致如下:

- 第一次請求時,使用者傳送賬號與密碼

- 後台校驗通過,則會生成乙個有時效性的token,再將此token傳送給使用者

- 使用者獲得token後,將此token儲存在本地,一般儲存在localstorage或cookie

- 之後的每次請求都會將此token新增在請求頭里,所有需要校驗身份的介面都會被校驗token,若token解析後的資料報含使用者身份資訊,則身份驗證通過。

對比傳統的校驗方式,token校驗有如下優勢:

下面介紹一下利用node+jwt(jwt教程)搭建簡易的token身份校驗

當使用者第一次登入時,提交賬號與密碼至伺服器,伺服器校驗通過,則生成對應的token,**如下:

const fs = require('fs');

const path = require('path');

const jwt = require('jsonwebtoken');

//生成token的方法

function generatetoken(data), cert, );

return token;

}//登入介面

router.post('/oa/login', async (ctx, next) => = data;

let sql = 'select uid from t_user where name=? and password=? and is_delete=0', value = [name, md5(password)];

await db.query(sql, value).then(res => );

ctx.body =

}} else

}).catch(e => );

});

使用者通過校驗將獲取到的token存放在本地:

store.set('loginedtoken',token);//store為外掛程式
之後客戶端請求需要驗證身份的介面,都會將token放在請求頭里傳遞給服務端:

service.interceptors.request.use(config => ;

let loginedtoken = store.get('loginedtoken');

let time =

date

.now();

let = config;

headers = ;

params

= ; config = ;

return config;

}, error => )

服務端對所有需要登入的介面均攔截token並校驗合法性。

function verifytoken(token)) || {};

let = result,current = math.floor(date.now()/1000);

if(current <= exp);

}}catch(e)

return res;

} let = ctx;

if(url.indexof('/user/') > -1) = header;

if (loginedtoken) = result;

if(uid);

await next();

}else

} else

}else

});

本示例使用的公鑰與私鑰可自己生成,操作如下:

1. 開啟命令列工具,輸入openssl,開啟openssl;

2. 生成私鑰:genrsa -out rsa_private_key.pem 2048

3. 生成公鑰:rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

閱讀原文

點此檢視node後台**

點此檢視前端**

SpringBoot實現基於token的登入驗證

springboot實現基於token的登入驗證 基於token的登入驗證實現原理 客戶端通過使用者名稱和密碼呼叫登入介面,當驗證資料庫中存在該使用者後,將使用者的資訊按照token的生成規則,生成乙個字串token,返回給客戶端,客戶端在呼叫其他介面的時候,需要在請求頭上帶上token,來驗證登入...

springboot基於token實現登入認證

最近因為專案需求,需採用token的方式實現登入認證,而不再使用session的方式登入,因而採用springboot整合jwt生成token實現登入認證。1.首先新增jwt所需jar包 io.jsonwebtoken groupid jjwt artifactid 0.7.0 version de...

JWT實現基於token的鑑權

2018年01月25日 17 59 15 2.一般放在http的headers 引數裡面的authorization裡面,值的前面加bearer關鍵字和空格。3.主要用於身份認證和資訊交換 4.由三部分組成,用英文句點連線 例如 yyyyyy.zzzzzz payload.signature 由小數...