亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

koa2服務端使用jwt進行鑒權及路由權限分發的流程分析

2024-05-06 16:53:30
字體:
來源:轉載
供稿:網友

大體思路

  后端書寫REST api時,有一些api是非常敏感的,比如獲取用戶個人信息,查看所有用戶列表,修改密碼等。如果不對這些api進行保護,那么別人就可以很容易地獲取并調用這些 api 進行操作。

  所以對于一些api,在調用之前,我們在服務端必須先對操作者進行“身份認證”,這就是所謂的鑒權。

  Json Web Token 簡稱為 JWT,它定義了一種通信雙方之間以 JSON 對象的形式安全傳遞信息的方法。JWT 可以使用 HMAC 算法或者是 RSA 的公鑰密鑰對進行簽名,復雜度較高,換來的是更可靠的安全系數。

  整個認證的流程大體如下:

  首先用戶登錄的接口是不用token認證的,因為這個接口本身就是token的產生來源。前端輸入用戶名和密碼后請求服務器登錄接口,服務器驗證用戶名密碼正確后,生成token并返回給前端,前端存儲token,并在后面的請求中把token帶在請求頭中傳給服務器,服務器驗證token有效,才可以進行下一步操作。

服務器生成token

  由于我們的服務端使用 Koa2 框架進行開發,除了要使用到 jsonwebtoken 庫之外,還要使用一個 koa-jwt 中間件,該中間件針對 Koa 對 jsonwebtoken 進行了封裝,使用起來更加方便。

 const router = require('koa-router')();const jwt = require('jsonwebtoken');const userModel = require('../models/userModel.js');router.post('/login', async (ctx) => { const data = ctx.request.body;const result = await userModel.findOne({  name: data.name,  password: data.password }) if(result !== null){  const token = jwt.sign({   name: result.name,   _id: result._id  }, 'zhangnan', { expiresIn: '2h' });  return ctx.body = {   code: 200,   token: token,   msg: '登錄成功'  } }else{  return ctx.body = {   code: 400,   token: null,   msg: '用戶名或密碼錯誤'  } }});module.exports = router;

 ?。ㄗ⒁猓哼@里暫時不討論加鹽加密校驗,實際項目中密碼不可能這樣明文驗證,這里只是為了著重討論token鑒權。在驗證了用戶名密碼正確之后,就可以調用 jsonwebtoken 的 sign() 方法來生成token,接收三個參數,第一個是載荷,用于編碼后存儲在 token 中的數據,也是驗證 token 后可以拿到的數據;第二個是密鑰,自己定義的,隨便寫個什么單詞都可以,但是驗證的時候一定要相同的密鑰才能解碼;第三個是options,可以設置 token 的過期時間。)

前端獲取token

  接下來就是前端獲取 token,這里是在 vue.js 中使用 axios 進行請求,請求成功之后拿到 token 保存到 localStorage 中。

submit(){ axios.post('/login', {  name: this.username,  password: this.password }).then(res => {  if(res.code === 200){   localStorage.setItem('token', res.data.token);  }else{   this.$message('登錄失敗')  } })}

  然后前端在請求后端api時,就把 token 帶在請求頭中傳給服務器進行驗證。每次請求都要獲取 localStorage 中的 token,這樣很麻煩,這里使用了 axios 的請求攔截器,進行全局設置,對每次請求都進行了取 token 放到 headers 中的操作。

axios.interceptors.request.use(config => { const token = localStorage.getItem('token'); config.headers.common['Authorization'] = 'Bearer ' + token; return config;})

(這段代碼,如果是vue項目,可以直接放在main.js中設置,表示每次請求前都會往請求頭的authorization里塞一個token,至于那個Bearer 是koa-jwt的一個標識單詞,方便解析)

服務器驗證token

  接下來服務器收到前端發過來的token后,就可以進行驗證。

const koa = require('koa');const koajwt = require('koa-jwt');const app = new koa();app.use(koajwt({ secret: 'zhangnan'}).unless({  path: [///register/, ///login/]}));

(在這里沒有定義錯誤處理函數,由于出現錯誤后會返回401,所以我直接就讓前端來處理這種異常情況,給出一個錯誤的交互提示即可)

分析koa-jwt源碼

  我們在node_mudules里面找到koa-jwt/lib/resolvers文件夾下的auth-header.js文件,看下koa-jwt做了些什么

 ?。梢钥吹剿窍扰袛嗾埱箢^中是否帶了 authorization,如果有,則通過正則將 token 從 authorization 中分離出來,這里我們也看到了Bearer這個單詞。如果沒有 authorization,則代表了客戶端沒有傳 token 到服務器,這時候就拋出 401 錯誤狀態。)

  再看看上一級的vertify.js。

 ?。梢钥吹皆?verify.js 中,它就是調用 jsonwebtoken 原生提供的 verify() 方法進行驗證返回結果。jsonwebtoken 的 sign() 方法用于生成 token ,而 verify() 方法當然則是用來解析 token。屬于jwt配對生產的兩個方法,所以koa-jwt這個中間件也沒做什么事,無非就是用正則解析請求頭,調用jwt的vertify方法驗證token,在koa-jwt文件夾的index.js中,koa-jwt還調用koa-unless進行路由權限分發)

  以上就是json web token的大體流程。

總結

以上所述是小編給大家介紹的koa2服務端使用jwt進行鑒權及路由權限分發的流程分析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av一区二区在线| 国产精品偷伦视频免费观看国产| 欧美成人免费va影院高清| 精品无码久久久久久国产| 日韩亚洲精品电影| 亚洲精品永久免费| 欧美激情videos| 91在线观看免费网站| 亚洲欧美日韩一区二区在线| 亚洲午夜精品久久久久久性色| 91免费精品国偷自产在线| 国产精品日日摸夜夜添夜夜av| 欧美亚洲日本网站| 国产精品美乳一区二区免费| 日韩在线不卡视频| 亚洲人成电影在线| 亚洲综合在线小说| 日韩av电影在线免费播放| 日韩精品在线影院| 欧美激情区在线播放| 国产一区二区三区精品久久久| 欧美性xxxxhd| 日韩欧美在线字幕| 精品久久久久久久久久久久久久| 丝袜美腿精品国产二区| 日韩av片永久免费网站| 日韩中文字在线| 欧美一级在线播放| 日韩免费av片在线观看| 亚洲欧美制服丝袜| 国产精品免费视频久久久| 国产精品福利久久久| 一区二区欧美在线| 中文字幕亚洲国产| 亚洲成人aaa| 国产精品永久免费| 欧美专区福利在线| 国产欧美精品日韩| 日韩精品免费综合视频在线播放| 国产91色在线|免| 久久夜色精品国产欧美乱| 日韩精品一区二区视频| 亚洲欧美日韩精品久久奇米色影视| 国产主播在线一区| 国产精品白丝av嫩草影院| 亚洲第一精品久久忘忧草社区| 国产亚洲精品日韩| 亚洲激情 国产| 国产va免费精品高清在线观看| 日韩av电影手机在线观看| 日韩不卡中文字幕| 欧美大尺度激情区在线播放| 一区二区三区视频观看| 国产精品久久久久久久久久久新郎| 伊是香蕉大人久久| 欧美激情按摩在线| 色偷偷亚洲男人天堂| 久久久亚洲国产天美传媒修理工| 国产成人精品久久亚洲高清不卡| 久久色精品视频| 久久免费国产视频| 亚洲乱码一区av黑人高潮| 久久久噜噜噜久久久| 久久久99免费视频| 欧美最顶级的aⅴ艳星| 日韩在线视频免费观看| 高清日韩电视剧大全免费播放在线观看| 自拍偷拍亚洲在线| 日韩中文字幕网址| 欧美丝袜第一区| 日韩欧美第一页| 国产精品第一页在线| 亚洲成人黄色在线观看| 久久久久久久久久久91| 尤物99国产成人精品视频| 国产91在线播放九色快色| 久久久免费在线观看| 欧美综合在线第二页| 91精品久久久久久久久久久| 亚洲精品福利资源站| 7777免费精品视频| 精品视频久久久| 久久综合久久美利坚合众国| 91在线视频精品| 国产99久久精品一区二区永久免费| 精品久久久久久久久久久| 亚洲国产精彩中文乱码av在线播放| 亚洲精品免费一区二区三区| 久久伊人精品天天| 亚洲成人精品久久| 久久成人精品一区二区三区| 国产精品揄拍500视频| 亚洲精品av在线播放| 成人精品网站在线观看| 国产精品久久久久久久久影视| 中文字幕欧美专区| 亚洲欧美日韩网| 日韩大陆毛片av| 夜夜嗨av一区二区三区四区| 伊人男人综合视频网| 日韩av网址在线| 亚洲欧美国产va在线影院| 亚洲欧美国产高清va在线播| 国产日本欧美一区二区三区| 亚洲色图17p| 91视频免费在线| 久久久久久伊人| 亚洲一区二区免费| 久久久av电影| 欧美中在线观看| 中文字幕亚洲情99在线| 毛片精品免费在线观看| 免费成人高清视频| 日韩av在线影视| 久久青草福利网站| 久久精品在线播放| 亚洲精品美女久久久久| 国产精欧美一区二区三区| 91久久精品国产91性色| 狠狠操狠狠色综合网| 精品久久久久久中文字幕大豆网| 日韩精品亚洲元码| 亚洲九九九在线观看| 91亚洲精品久久久久久久久久久久| 91精品久久久久久久久中文字幕| 97精品欧美一区二区三区| 亚洲天堂网在线观看| 日本精品视频网站| 亚洲一区二区福利| 成人黄色免费看| 久久久久久久爱| 欧美日韩国产丝袜美女| 日韩一区二区久久久| 久久精品国产免费观看| 中文字幕免费精品一区| 久久久女人电视剧免费播放下载| 日韩高清欧美高清| 在线观看精品自拍私拍| 国产成人av网| 日韩av资源在线播放| 91精品久久久久| 一区二区国产精品视频| 色久欧美在线视频观看| 欧美大尺度激情区在线播放| 国产日韩欧美日韩| 精品一区电影国产| 一区二区三区视频免费| 中文字幕日韩av综合精品| 国产精品日韩在线一区| 国产97在线|日韩| 日韩经典中文字幕在线观看| 亚洲精品在线不卡| 亚洲精品有码在线| 精品日韩中文字幕| 欧美肥老妇视频| 亚洲一区二区三区四区视频| 国产精品av免费在线观看| 全球成人中文在线| 亚洲精品网站在线播放gif| 免费av在线一区| 在线观看久久久久久| 欧美日韩国产中文精品字幕自在自线| 亚洲精品99久久久久中文字幕| 在线国产精品播放|