身份驗證 關於token
token
什麼是token
在計算機身份認證中是令牌(臨時)的意思,在詞法分析中是標記的意思。一般作為邀請、登入系統使用
1、Token的引入:Token是在客戶端頻繁向服務端請求資料,服務端頻繁的去資料庫查詢使用者名稱和密碼並進行對比,判斷使用者名稱和密碼正確與否,並作出相應提示,在這樣的背景下,Token便應運而生。
2、Token的定義:Token是服務端生成的一串字串,以作客戶端進行請求的一個令牌,當第一次登入後,伺服器生成一個Token便將此Token返回給客戶端,以後客戶端只需帶上這個Token前來請求資料即可, 無需再次帶上使用者名稱和密碼。
3、使用Token的目的:Token的目的是為了減輕伺服器的壓力,減少頻繁的查詢資料庫,使伺服器更加健壯。
token機制,在服務端不需要儲存使用者的登入記錄,全部發給客戶端有客戶端自己存(cookie,local)
1.客戶端使用使用者名稱跟密碼請求登入
2.服務端收到請求,去驗證使用者名稱與密碼
3.驗證成功後,服務端會簽發一個 Token(加了密的字串),再把這個 Token 傳送給客戶端
4.客戶端收到 Token 以後可以把它儲存起來,比如放在 Cookie 裡或者 Local Storage 裡
5.客戶端每次向服務端請求資源的時候需要帶著服務端簽發的 Token
6.服務端收到請求,然後去驗證客戶端請求裡面帶著的
JWT
JWT 代表 JSON Web Token ,它是一種用於認證頭部的 token 格式。這個 token 幫你實現了在兩個系統之間以一種安全的方式傳遞資訊
安裝:npm install jsonwebtoken
引入: let jwt = require(‘jsonwebtoken’)
生成簽名:let token = jwt.sign(payload,secretOrPrivateKey,[options,callback])
[payload] json 還有username,userid
[secretOrPrivateKey] 加密規則,字串,或者私鑰path模組
[options] 可選配置項,expiresIn 過期時間 "30d" 30天
[callback] 成功回撥, 可選 返回製作後的token,也可同步返回
監聽登入時的請求,或者使用者名稱和密碼進行對地,如果正確返回token,如果不正確說明使用者名稱密碼錯誤
在相應的檔案中
router.get('/login',function(request,response){ // request 前端發起的請求 // response 後端的響應 // get 請求的引數 req.query 獲取url中?後面的引數,自動轉為了物件 // { username: 'zhangsan', password: '123456' } let adminName = 'admin'; let adminPwd = '12345'; console.log(request.query) let username = request.query.username; let password = request.query.password; console.log(username,password) if(username == adminName && password === adminPwd){ //登入成功,生成toekn,下發token console.log('登入成功,生成toekn,下發token') let token = jwt.sign({id:1,username},'scret12',{expiresIn:"30d"}); console.log(token) response.send({code:1,msg:"登入成功",data:{token}}) }else{ console.log('登入失敗') } })
可以在postman中發起請求,輸入正確的使用者名稱密碼。
返回的值如圖所示
終端中顯示的效果: