日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

express使用JWT和httpOnly cookie进行安全验证

發(fā)布時間:2025/3/17 编程问答 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 express使用JWT和httpOnly cookie进行安全验证 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

express使用JWT和httpOnly cookie進行身份驗證

對大創(chuàng)項目中使用JWT作為身份驗證的總結。
一般情況使用JWT作為身份驗證的方式可以直接參考這篇文章:Node.js 使用 express-jwt 解析 JWT 。這里主要針對httpOnly類型的cookie進行代碼調(diào)整。

1. 安裝和引入

需要使用的模塊:express-jwt ,用于解析token; jsonwebtoken ,用于生成token ; cookie-parser,用于解析cookie(據(jù)說express已經(jīng)內(nèi)置,但是為可能沒有該模塊導致避免取不到cookie,安裝該模塊)。

npm i express-jwt jsonwebtoken cookie-parser --save

引入:

const express = require('express'); const jwt = require('jsonwebtoken'); const expressJwt = require('express-jwt'); const cookieParser = require('cookie-parser');const app = express();

2. 生成token,放入cookie,驗證token

封裝一個生成token的方法:

//設置一個私鑰 const scrict = 'examplev8w9egf';function createToken = palyload =>{//給palyload添加一個生成時間戳的屬性palyload.curtime = Date.now();//這里添加Bearer是因為express-jwt模塊默認獲取到token的方法//當然這里也沒必要添加,因為后續(xù)我們不會使用默認的解析方式const token = 'Bearer ' + jwt.sign(palyload,scrict, { expiresIn: 3600 * 24 * 3 //過期時間})return token; }

在需要的位置生成和發(fā)送token到cookie:

如果不知道express中怎么使用cookie,可以參考:Express Cookie的使用

app.use('/',(req,res)=>{let token = createToken({login:true,name:user}) //這里的palyload參數(shù)可以自行設定//將token存入cookie,設置最大失效時間和httpOnlyres.cookie('token',token,{ maxAge:1000*3600*24, path:'/', httpOnly:true });//響應客戶端res.send({msg:'cookie設置成功'}); }

客戶端攜帶cookie請求:

//這里使用JQ封裝的ajax。默認是會自動攜帶cookie的,無需單獨設置: $.ajax({//一般情況攜帶token的方式。但這里設置的是httpOnly類型,使用js是無法獲取的,交給服務端處理 /* headers:{Accept: "application/json; charset=utf-8",Authorization:token}, */url: '/',type: 'put',contentType: "application/json", success: function (data) {return;},error: function (err) {console.log(err);},//這里加一個服務器端校驗token失敗返回401狀態(tài)碼的操作,跳轉(zhuǎn)回登錄界面statusCode:{401:function () {//token驗證失敗 異常處理alert('token驗證失敗!');}} })

服務器端解析cookie中的token:

//cookie-parser掛載 home.use(cookieParser());//express-jwt掛載,驗證token home.use(expressJwt({secret:scrict, //封裝生成token方法時候設置的私鑰algorithms: ['HS256'], //解碼方式建議加上,否則可能會報錯/*重要的是這里,需要改變express-jwt默認取得token的方式默認模塊會從請求頭的authorization中取得token,token以'Bearer'開頭 */getToken:function fromCookie(req){//嘗試從cookie讀取token進行驗證if(req.cookies.token)return req.cookies.token.split(' ')[1];return null; } }).unless({path:['/login','logout'] //白名單,該地址下的不會進行解析 })) //token校驗錯誤處理中間件 home.use(function (err, req, res, next) {if (err.name === 'UnauthorizedError') { console.log(err);res.status(401).send('invalid token...'); //根據(jù)具體情況設置} })//通過解析后的處理 app.use('/user',(req,res)=>{res.send({err:0,msg:'token通過解析驗證'}) })

總結

以上是生活随笔為你收集整理的express使用JWT和httpOnly cookie进行安全验证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。