koa jwt 全面解析,安檢利器!

2021-09-24 06:45:49 字數 2534 閱讀 3394

學習 koa 不易,今天學習到了koa-jwt這個登陸驗證必不可少的中介軟體。本文會說明jwt是什麼、token怎麼來的、如何驗證token。

一反常態,先上**!(本**由koa-generater生成,安裝koa-jwt, jsonwebtoken兩個 npm 包 )

藍色框:為了完成demo,在原有腳手架中做的調整。

檔名: routes/index.js

這裡簡單的模仿乙個 login 請求,返回乙個 token。

檔名: routes/users.js

/users以下的路由需通過 jwt 驗證才能訪問

檔名: auth.js

1.我們在瀏覽器輸入localhost:3000/login獲取 token。一下大串都是token,分為3部分,用 '.' 分隔;

2.這裡用 postman 去訪問 localhost:3000/users/info 模擬訪問使用者資料。要在 header中加入 authorization, 注意:authorization的值的格式;

3.當輸入 users 路由的時候 koa-jwt 不去驗證 token 的正確性,僅僅去驗證header中是否有authorization並且值為'bearer token',然後再根據配置中 isrevoked 的函式去進行驗證。isrevoked 返回 true 表明 token 不正確,false 表示 token 正確。

4.在驗證中,使用jsonwebtoken.verify去驗證 token 是否正確,並返回。

koa-jwt:這個函式還是截圖看得清楚

1.secret: 可以理解為乙個加密因子,在生成 token 的時候用這個因子,驗證 token 的時候也用同乙個。serect 可以是陣列,當secret是乙個陣列時,在驗證 token 時任何乙個 因子通過驗證,token就合法有效。

2.passthrough: 當為true時,即使在 header 中沒有 authorization 也會通過這個 中介軟體(僅僅通過中介軟體的驗證,沒有通過 jsonwebtoken.verify)

3.isrevoked:需要乙個函式來驗證token的對錯。這個函式有3個引數:ctx, decodedtoken, token。其中 token 可以直接被驗證: jsonwebtoken.verify(token)

jsonwebtoken: 這個才是主角!

jsonwebtoken.sign(payload, secretorprivatekey, [options, callback]) 生成 token複製**
1.payload是需要被加密的資料(我的理解 jwt其實就是加密解密和驗證的過程)。在payload裡有三個key很特別:iat(issued at)、exp(expiresin)、nbf(notbefore),這幾個引數推薦寫在 options 中,不建議寫在 payload 裡;

2.secretorprivatekey可以是字串,也可以是對成加密的 key,或者非對稱加密的私有key;

3.options這裡可以選擇的引數就好多了,algorithms:加密演算法,預設是hs256,expriesin: token有效持續時間,notbefore: token在什麼時候失效,更多引數請參考官網;

4.返回乙個token。

jwt.verify(token, secretorpublickey, [options, callback]) 對token的驗證複製**
1.token: 當然是用 sign 函式生成的token啦;

2.secretorpublickey:與生成 token 的加密因子相互對應,要麼是相同的字串和對稱加密的key,或者是非對稱加密的公有key;

3.options: 與 sign 相互照應且要一致。audience,issuer,jwtid等。

4.正確的時候返回 payload,錯誤的時候throw 乙個 err,裡面包含了錯誤的message,根據message判斷錯誤型別。

文件這裡有個坑:

expiredin: 預設單位是秒!!! 以下是鐵證啊(jsonwebtoken/verify.js,這裡是用秒做的對比,千萬別以為是毫秒

tips: 通常情況下,我們也會在cookie裡寫乙份token,這樣每個請求都可以通過token驗證,此時可以忽略 header中的 autherization(passthrough: true

全面解析Redis

關係型資料庫在處理海量資料和高併發等技術的時候不是太友善,因此有人提出非關係型資料庫 所以有了基於對關係型資料庫的補充nosql 目前具有的特點 1 可擴充,可伸縮 2 大量資料下的高效能 redis能讀的速度是110000次 s,寫的速度是81000次 s 3 靈活的資料模型 4 高可用 redi...

HTML解析利器HtmlAgilityPack

xmlversion 1.0 encoding utf 8 articles article title 在asp.net中使用highcharts js圖表 title url url createat type en 2011 04 07 price article article title ...

HTML解析利器HtmlAgilityPack

xmlversion 1.0 encoding utf 8 articles article title 在asp.net中使用highcharts js圖表 title url url createat type en 2011 04 07 price article article title ...