最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

jwt在express中token的加密解密實現(xiàn)過程

 更新時間:2025年01月13日 10:03:02   作者:小灰灰學編程  
文章詳細介紹了JWT在Node.js中的生成和驗證過程,包括設置密鑰、使用中間件進行token驗證等步驟,并提供了一個完整的示例代碼,感興趣的朋友跟隨小編一起看看吧

在我們前面學習了 JWT認證機制在Node.js中的詳細闡述 之后,今天來詳細學習一下token是如何生成的,secret密鑰的加密解密過程是怎么樣的。

安裝依賴

  • express:用于創(chuàng)建服務器
  • jsonwebtoken:用于生成和驗證JWT
  • body-parser:用于解析請求體中的數(shù)據(jù)
npm install express jsonwebtoken body-parser

設置密鑰

SECRET_KEY:用于簽名和驗證JWT的密鑰。請確保在生產(chǎn)環(huán)境中使用更安全的方式存儲密鑰。

// 密鑰(請確保在生產(chǎn)環(huán)境中使用更安全的方式存儲密鑰)
const SECRET_KEY = 'your_secret_key';

中間件

bodyParser.json():解析請求體。

// 中間件:解析請求體
app.use(bodyParser.urlencoded({extended: false}))

authenticateJWT:驗證JWT的中間件。如果驗證失敗,返回403狀態(tài)碼。

// 中間件:驗證JWT
const authenticateJWT = (req, res, next) => {
    const token = req.headers.authorization;
    if (!token) {
        return res.sendStatus(403);
    }
    jwt.verify(token, SECRET_KEY, (err, user) => {
        if (err) {
            return res.sendStatus(403);
        }
        console.log(user, 'user')
        req.user = user;
        next();
    });
};

路由

/register:模擬用戶注冊并生成JWT。

// 路由:注冊用戶(示例,僅用于生成token)
app.post('/register', (req, res) => {
    const { username, password } = req.body;
    // 在實際場景中,您應該驗證用戶并存儲其信息
    // 這里僅假設用戶驗證成功
    if (username && password) {
        // 通過jwt.sign() 生成JWT字符串,
        // 三個參數(shù)分別是:1-用戶信息對象(不要把密碼進行加密),2-加密密鑰,3-配置對象 expiresIn-配置token有效期
        const token = jwt.sign({ username }, SECRET_KEY, { expiresIn: '1h' });
        res.json({
            message: 'User registered successfully',
            token: token
        });
    } else {
        res.status(400).json({ message: 'Invalid credentials' });
    }
});

/protected:受保護的路由,需要驗證JWT才能訪問。

// 路由:受保護的資源
app.get('/protected', authenticateJWT, (req, res) => {
    res.json({
        message: 'This is a protected route',
        user: req.user
    });
});

運行服務器

服務器在3000端口運行,你可以通過http://localhost:3000訪問。

app.listen(port, () => {
    console.log(`Server is running on http://localhost:${port}`);
});

效果

完整代碼

const express = require('express');
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
// 密鑰(請確保在生產(chǎn)環(huán)境中使用更安全的方式存儲密鑰)
const SECRET_KEY = 'your_secret_key';
// 中間件:解析請求體
app.use(bodyParser.urlencoded({extended: false}))
// 路由:注冊用戶(示例,僅用于生成token)
app.post('/register', (req, res) => {
    const { username, password } = req.body;
    // 在實際場景中,您應該驗證用戶并存儲其信息
    // 這里僅假設用戶驗證成功
    if (username && password) {
        // 通過jwt.sign() 生成JWT字符串,
        // 三個參數(shù)分別是:1-用戶信息對象(不要把密碼進行加密),2-加密密鑰,3-配置對象 expiresIn-配置token有效期
        const token = jwt.sign({ username }, SECRET_KEY, { expiresIn: '1h' });
        res.json({
            message: 'User registered successfully',
            token: token
        });
    } else {
        res.status(400).json({ message: 'Invalid credentials' });
    }
});
// 中間件:驗證JWT
const authenticateJWT = (req, res, next) => {
  console.log(req.headers, 'req.headers')
    const token = req.headers.authorization;
    if (!token) {
        return res.sendStatus(403);
    }
    console.log(token, 'token')
    jwt.verify(token, SECRET_KEY, (err, user) => {
        if (err) {
            return res.sendStatus(403);
        }
        console.log(user, 'user')
        req.user = user;
        next();
    });
};
// 路由:受保護的資源
app.get('/protected', authenticateJWT, (req, res) => {
    res.json({
        message: 'This is a protected route',
        user: req.user
    });
});
app.listen(port, () => {
    console.log(`Server is running on http://localhost:${port}`);
});

除了 jwt.verify進行token驗證之外,還可以使用 express-jwt 中間件。

在Express應用中,express-jwt(現(xiàn)在通常稱為express-jwt-ez,因為它是express-jwt的一個更現(xiàn)代、更輕量級的替代品)是一個中間件,用于驗證JWT(JSON Web Tokens)。它會自動從請求中提取JWT,并使用提供的密鑰或密鑰函數(shù)來解密(驗證)它。如果JWT有效,中間件會將解碼后的負載(payload)附加到請求對象上,以便后續(xù)的處理程序(handler)可以使用。

安裝express-jwt

npm install express-jwt

配置JWT中間件

// 配置JWT中間件
app.use(jwt({
    secret: SECRET_KEY,
    algorithms: ['HS256'] // 指定用于簽名JWT的算法(這里使用的是HS256)
}).unless({
    path: ['/generate-token', /^\/public\//] // 指定哪些路徑應該跳過JWT驗證(例如,生成token的端點和公共資源的端點)
}));

需要注意的是,在使用此方法進行token校驗時,Authorization 的value指前面需要包含"Bearer "字符串。

完整代碼

const express = require('express');
const expressjwt = require('express-jwt');
const jwt = require('jsonwebtoken');
const app = express();
const port = 3000;
// 密鑰(請確保在生產(chǎn)環(huán)境中使用更安全的方式存儲密鑰)
const SECRET_KEY = 'your_secret_key_here';
// 中間件:解析請求體
app.use(bodyParser.urlencoded({extended: false}))
// 配置JWT中間件
app.use(expressjwt({
    secret: SECRET_KEY,
    algorithms: ['HS256'] // 指定用于簽名JWT的算法(這里使用的是HS256)
}).unless({
    path: ['/generate-token', /^\/public\//] // 指定哪些路徑應該跳過JWT驗證(例如,生成token的端點和公共資源的端點)
}));
// 路由:生成JWT(這個端點不需要JWT驗證)
app.post('/generate-token', (req, res) => {
    const { username } = req.body;
    if (!username) {
        return res.status(400).json({ message: 'Username is required' });
    }
    // 生成JWT(在實際應用中,你可能還會包含其他信息,如用戶ID、角色等)
    const token = jwt.sign({ username }, SECRET_KEY, { expiresIn: '1h' });
    res.json({
        message: 'Token generated successfully',
        token: token
    });
});
// 路由:受保護的資源(這個端點需要JWT驗證)
app.get('/protected', (req, res) => {
    // 如果JWT驗證成功,req.auth 將包含解碼后的負載(payload)
    const { username } = req.auth;
    res.json({
        message: 'This is a protected route',
        user: {
            username: username
        }
    });
});
app.listen(port, () => {
    console.log(`Server is running on http://localhost:${port}`);
});

到此這篇關于jwt在express中token的加密解密實現(xiàn)方法的文章就介紹到這了,更多相關jwt express token加密解密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

会东县| 南靖县| 新源县| 中牟县| 辽宁省| 嘉荫县| 台北市| 廊坊市| 漳浦县| 平湖市| 芜湖县| 扬州市| 新巴尔虎右旗| 聂拉木县| 西乌珠穆沁旗| 宁陵县| 田阳县| 揭西县| 越西县| 扶余县| 河东区| 马尔康县| 盘锦市| 康马县| 淮阳县| SHOW| 海兴县| 库尔勒市| 陆丰市| 荔波县| 怀宁县| 华宁县| 土默特右旗| 赞皇县| 轮台县| 高邮市| 垦利县| 惠水县| 蒲城县| 龙江县| 兴化市|