<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        node實現基于token的身份驗證

        來源:懂視網 責編:小采 時間:2020-11-27 19:56:05
        文檔

        node實現基于token的身份驗證

        node實現基于token的身份驗證:這篇文章主要介紹了node實現基于token的身份驗證,現在分享給大家,有需要的朋友可以參考一下最近研究了下基于token的身份驗證,并將這種機制整合在個人項目中。現在很多網站的認證方式都從傳統的seesion+cookie轉向token校驗。對比傳統的校驗方式,toke
        推薦度:
        導讀node實現基于token的身份驗證:這篇文章主要介紹了node實現基于token的身份驗證,現在分享給大家,有需要的朋友可以參考一下最近研究了下基于token的身份驗證,并將這種機制整合在個人項目中。現在很多網站的認證方式都從傳統的seesion+cookie轉向token校驗。對比傳統的校驗方式,toke

        這篇文章主要介紹了node實現基于token的身份驗證,現在分享給大家,有需要的朋友可以參考一下

        最近研究了下基于token的身份驗證,并將這種機制整合在個人項目中。現在很多網站的認證方式都從傳統的seesion+cookie轉向token校驗。對比傳統的校驗方式,token確實有更好的擴展性與安全性。

        傳統的session+cookie身份驗證

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

        token身份校驗

        流程大致如下:

        1. 第一次請求時,用戶發送賬號與密碼

        2. 后臺校驗通過,則會生成一個有時效性的token,再將此token發送給用戶

        3. 用戶獲得token后,將此token存儲在本地,一般存儲在localstorage或cookie

        4. 之后的每次請求都會將此token添加在請求頭里,所有需要校驗身份的接口都會被校驗token,若token解析后的數據包含用戶身份信息,則身份驗證通過。

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

        1. 在基于token的認證,token通過請求頭傳輸,而不是把認證信息存儲在session或者cookie中。這意味著無狀態。你可以從任意一種可以發送HTTP請求的終端向服務器發送請求。

        2. 可以避免CSRF攻擊

        3. 當在應用中進行 session的讀,寫或者刪除操作時,會有一個文件操作發生在操作系統的temp 文件夾下,至少在第一次時。假設有多臺服務器并且 session 在第一臺服務上創建。當你再次發送請求并且這個請求落在另一臺服務器上,session 信息并不存在并且會獲得一個“未認證”的響應。我知道,你可以通過一個粘性 session 解決這個問題。然而,在基于 token 的認證中,這個問題很自然就被解決了。沒有粘性 session 的問題,因為在每個發送到服務器的請求中這個請求的 token 都會被攔截。

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

        示例

        當用戶第一次登錄時,提交賬號與密碼至服務器,服務器校驗通過,則生成對應的token,代碼如下:

        const fs = require('fs');
        const path = require('path');
        const jwt = require('jsonwebtoken');
        //生成token的方法
        function generateToken(data){
         let created = Math.floor(Date.now() / 1000);
         let cert = fs.readFileSync(path.join(__dirname, '../config/pri.pem'));//私鑰
         let token = jwt.sign({
         data,
         exp: created + 3600 * 24
         }, cert, {algorithm: 'RS256'});
         return token;
        }
        
        //登錄接口
        router.post('/oa/login', async (ctx, next) => {
         let data = ctx.request.body;
         let {name, password} = 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 => {
         if (res && res.length > 0) {
         let val = res[0];
         let uid = val['uid'];
         let token = generateToken({uid});
         ctx.body = {
         ...Tips[0], data: {token}
         }
         } else {
         ctx.body = Tips[1006];
         }
         }).catch(e => {
         ctx.body = Tips[1002];
         });
        
        });

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

        store.set('loginedtoken',token);//store為插件

        之后客戶端請求需要驗證身份的接口,都會將token放在請求頭里傳遞給服務端:

        service.interceptors.request.use(config => {
         let params = config.params || {};
         let loginedtoken = store.get('loginedtoken');
         let time = Date.now();
         let {headers} = config;
         headers = {...headers,loginedtoken};
         params = {...params,_:time};
         config = {...config,params,headers};
         return config;
        }, error => {
         Promise.reject(error);
        })

        服務端對所有需要登錄的接口均攔截token并校驗合法性。

        function verifyToken(token){
         let cert = fs.readFileSync(path.join(__dirname, '../config/pub.pem'));//公鑰
         try{
         let result = jwt.verify(token, cert, {algorithms: ['RS256']}) || {};
         let {exp = 0} = result,current = Math.floor(Date.now()/1000);
         if(current <= exp){
         res = result.data || {};
         }
         }catch(e){
        
         }
         return res;
        
        }
        
        app.use(async(ctx, next) => {
         let {url = ''} = ctx;
         if(url.indexOf('/user/') > -1){//需要校驗登錄態
         let header = ctx.request.header;
         let {loginedtoken} = header;
         if (loginedtoken) {
         let result = verifyToken(loginedtoken);
         let {uid} = result;
         if(uid){
         ctx.state = {uid};
         await next();
         }else{
         return ctx.body = Tips[1005];
         }
         } else {
         return ctx.body = Tips[1005];
         }
         }else{
         await next();
         }
        });

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

        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后臺代碼
        點此查看前端代碼

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        node實現基于token的身份驗證

        node實現基于token的身份驗證:這篇文章主要介紹了node實現基于token的身份驗證,現在分享給大家,有需要的朋友可以參考一下最近研究了下基于token的身份驗證,并將這種機制整合在個人項目中。現在很多網站的認證方式都從傳統的seesion+cookie轉向token校驗。對比傳統的校驗方式,toke
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 日韩免费视频播播| 亚洲国产一成久久精品国产成人综合 | a级毛片在线免费| 69国产精品视频免费| 国产禁女女网站免费看| 亚洲第一区香蕉_国产a| 麻豆精品成人免费国产片| 亚洲an天堂an在线观看| A片在线免费观看| 日韩亚洲AV无码一区二区不卡| 99爱在线精品视频免费观看9| 亚洲A∨无码一区二区三区| 亚洲一区二区免费视频| 亚洲 暴爽 AV人人爽日日碰| 成人人免费夜夜视频观看| 成人亚洲国产精品久久| 久久亚洲国产精品123区| 日韩精品在线免费观看| 亚洲高清中文字幕| 女人18毛片水最多免费观看| 免费看内射乌克兰女| 亚洲ⅴ国产v天堂a无码二区| 国产成人免费网站| 牛牛在线精品观看免费正| 亚洲无码在线播放| 日韩在线一区二区三区免费视频| 成人黄页网站免费观看大全| 性色av极品无码专区亚洲| 亚洲精品成人片在线播放| 最近中文字幕mv免费高清在线| 亚洲成A人片在线播放器| 国产性爱在线观看亚洲黄色一级片 | 免费一看一级毛片| 国内少妇偷人精品视频免费| 亚洲成人免费在线观看| 久久久久久精品免费免费自慰| 亚洲国产区男人本色| 亚洲无线观看国产精品| 拍拍拍又黄又爽无挡视频免费| www在线观看免费视频| 亚洲人成国产精品无码|