小編這次要給大家分享的是如何實現(xiàn)Node登錄權限驗證token驗證,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比東風網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式東風網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋東風地區(qū)。費用合理售后完善,十年實體公司更值得信賴。
1. token的使用場景
2. 基于token的驗證原理
后端不再存儲認證信息,而是在用戶登錄的時候生成一個token,然后返回給前端,前端進行存儲,在需要進行驗證的時候將token一并發(fā)送到后端,后端進行驗證
加密的方式:對稱加密和非對稱加密,對稱加密指的是加密解密使用同一個密鑰,非對稱加密使用公鑰和私鑰,加密用私鑰加密,解密用公鑰解密
3. 基于Token的身份驗證的過程如下:
客戶端:用戶名和密碼請求登錄
服務器:收到請求,驗證用戶名和密碼,驗證成功后,分發(fā)一個Token返回給客戶端
客戶端:將Token存儲,例如放在 Cookie 里或者 Local Storage 里,后續(xù)每次請求,帶上此Token
服務器:收到請求,驗證Token是否正確,驗證成功返回請求數(shù)據(jù)
4. node + jwt(jsonwebtoken) 搭建token身份驗證
安裝 ActivePerl https://www.activestate.com/activeperl/downloads或本地下載地址:https://www.jb51.net/softs/27286.html
安裝 OpenSSl http://slproweb.com/products/Win32OpenSSL.html或本地下載地址: https://www.jb51.net/softs/561776.html
在 ras 文件 終端夾下輸入 openssl
生成私鑰
openssl> genrsa -out ./private_key.pem 1024
生成公鑰
openssl> rsa -in ./private_key.pem -pubout -out ./public_key.pem
下載包 jsonwebtoken
npm i jsonwebtoken -D // 安裝jsonwebtoken模塊 const jwt = require('jsonwebtoken'); //引入包
通過私鑰生成 token,發(fā)送給前端
let private_key=fs.readFileSync(path.join(__dirname,'./private_key.pem')) var token = jwt.sign(palyload, private_key,{ algorithm: 'RS256'});
后端接收 token 驗證是否有 token,沒有則生成
前端把 token 存再 localStorage 或者 cookie 里
$.ajax({ url:'http://localhost:3000/login', data: { username:username.value, password:password.value, // token:localStorage.getItem('token') token: cookieUtil('token') }, method: "POST", success ( res ) { // const result = JSON.parse( res ); const result = JSON.parse(res); console.log( result ); if(result.auth){ // localStorage.setItem('token', result.auth); cookieUtil('token', result.auth ); } } }) }
下次前端發(fā)送代 token 數(shù)據(jù)的請求
后端 使用公鑰 token驗證( token解密 )
// token驗證( token解密 ) fs.readFile(path.join(__dirname,'../rsa/public_key.pem'),'utf8',(error,public_doc) =>{ if( error ) throw error var deencode = jwt.verify( jwt_token, public_doc ) })
完整代碼
const express = require('express'); const jwt = require('jsonwebtoken'); const path = require( 'path' ); const fs = require( 'fs' ); const router = new express.Router(); router.post('/', (req, res, next) => { const { username, password,token } = req.body; //讀取生成的私鑰文件 let private_key = fs.readFileSync(path.join(__dirname,'../rsa/private_key.pem')); if(!token) { //生成的 token 唯一的,所以第一次沒有 koen 或者 token 過期是時才生成 token var jwt_token = jwt.sign({ username, password }, private_key, { algorithm: 'RS256'} ); // 公鑰解密 前端傳來的 token fs.readFile(path.join(__dirname,'../rsa/public_key.pem'),'utf8'(error,public_doc) =>{ if( error ) throw error var deencode = jwt.verify( jwt_token, public_doc ) console.log(deencode ); }) res.render('login', { data: JSON.stringify({ auth: jwt_token, //把生成的jwt 發(fā)給前端 status: 1 //0 失敗, 1 登錄成功 2 登錄重復 }) }) } else { //前端發(fā)來的 token 有值,說明是第二次登錄了或者token沒有過期,不用再生成 token 了 res.render('login',{ data: JSON.stringify({ message: '登錄成功', status: 1 //0 失敗, 1 登錄成功 2 登錄重復 }) }) } }) module.exports = router;
看完這篇關于如何實現(xiàn)Node登錄權限驗證token驗證的文章,如果覺得文章內(nèi)容寫得不錯的話,可以把它分享出去給更多人看到。
網(wǎng)站欄目:如何實現(xiàn)Node登錄權限驗證token驗證
轉載源于:http://jinyejixie.com/article44/pgseee.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供關鍵詞優(yōu)化、App開發(fā)、云服務器、面包屑導航、標簽優(yōu)化、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)