JWT在Node中如何从认证、授权、安全性、跨域等方面全面应用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1120个文字,预计阅读时间需要5分钟。
在Node.js中使用JWT的方法概述:
1. 安装库:首先,需要安装jsonwebtoken库,用于生成和验证JWT。
2.生成JWT:使用库中的方法,结合用户的身份信息,生成一个JWT。
3.存储JWT:通常将JWT存储在客户端,如cookie或localStorage。
4.验证JWT:在每次请求时,验证JWT的有效性,以确保用户身份的合法性。
具体步骤如下:
1. 安装jsonwebtoken库:
bash npm install jsonwebtoken2. 生成JWT: javascript const jwt=require('jsonwebtoken');
const token=jwt.sign({ userId: 123 }, 'secretKey', { expiresIn: '1h' });
3. 存储JWT: 在客户端,可以使用localStorage或cookie来存储生成的JWT。
4. 验证JWT: 在服务器端,每次请求时验证JWT。 javascript const jwt=require('jsonwebtoken');
const verifyToken=(req, res, next)=> { const token=req.headers['authorization']; if (!token) return res.status(403).send('No token provided.');
jwt.verify(token, 'secretKey', (err, decoded)=> { if (err) return res.status(500).send('Failed to authenticate token.'); req.userId=decoded.userId; next(); }); };
希望这些信息对您有所帮助!
nodejs中要怎么使用jwt?下面本篇文章就来给大家从四个方面介绍一下jwt的使用,希望对大家有所帮助!
导语:由于nod… | =poad | 2021-10-15 | 1.0.1 | jwt appstore rator-core |安装jwt
我个人觉得这个jsonwebtoken很不错,本文就使用这个包。
npm i jsonwebtoken常见用法
- 签名
签名语法:
jwt.sign(payload, secretOrPrivateKey, [options, callback])。例如:
// 一般签名 var jwt = require('jsonwebtoken'); var token = jwt.sign({ foo: 'bar' }, 'secret'); // 加私钥签名 var privateKey = fs.readFileSync('private.key'); var token = jwt.sign({ foo: 'bar' }, privateKey, { algorithm: 'RS256'}); // 设置过期时间 jwt.sign({ data: 'bar' }, 'secret', { expiresIn: 60 * 60 }); // 1h
- 验证
验证语法:
jwt.verify(token, secretOrPublicKey, [options, callback])例如:
// 一般验证 var decoded = jwt.verify(token, 'secret'); console.log(decoded.foo) // bar // 公钥验证 var cert = fs.readFileSync('public.pem'); jwt.verify(token, cert, function(err, decoded) { console.log(decoded.foo) // bar });
- 解码
解码语法:
jwt.decode(token [, options])例如:
var decoded = jwt.decode(token, {complete: true}); console.log(decoded.header); console.log(decoded.payload);封装方法
根据安装配置里面的方法,可以根据自己的需要进行二次封装,更加适合自己的方法。
- 引入依赖包和配置
const jwt = require("jsonwebtoken"); const config = { secret: '2021123456**', time: 60 * 60, }
- 签名
function create (data, time) { let token = jwt.sign(data, config.secret, { algorithm: "HS256", expiresIn: time || config.time, }) return token; }
- 验证
function verify (token) { return jwt.verify(token, config.secret, function (err, decoded) { if (err) { return { code: 1, msg: 'invalid', data: null, } } else { return { code: 2, msg: 'valid', data: decoded, } } }) }
- 解码
function decoded (token, complete = true) { return jwt.decode(token, { complete, }); }
上面是比较简单的方法,如果你还想使用公钥私钥,可以用上面安装配置里面介绍的那样。
实战练习经过上面的封装方法,可以来实战演练一下,是否有效。
- 新建一个文件夹
test,新建一个文件index.js用于存放测试案例,jwt.js用于存储调用方法。mkdir test cd test npm init -y npm i jsonwebtoken
- jwt方法
// jwt.js const jwt = require('jsonwebtoken'); const config = { secret: '2021123456', // 密钥 time: 60*60, // 过期时间 } // 创建签名令牌 function create (data, time) { let token = jwt.sign(data, config.secret, { algorithm: 'HS256', expiresIn: time || config.time, }); return token; } // 验证令牌 function verify (token) { return jwt.verify(token, config.secret, function (err, decoded) { if (err) { return { code: 1, msg: 'invalid', data: null, } } else { return { code: 2, msg: 'valid', data: decoded, } } }) } // 解码令牌 function decoded (token, complete = true) { return jwt.decode(token, { complete, }); } const token = { create, verify, decoded, } module.exports = token;
- 创建token,验证token,解码token
// index.js const jwt = require('./jwt'); // 生成令牌 let token = jwt.create({'id': 1, 'name': 'mark'}, 60*60*2); console.log(token); /* eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJpZCI6MSwibmFtZSI6Im1hcmsiLCJpYXQiOjE2MzkxMDYyNzMsImV4cCI6MTYzOTExMzQ3M30. 20O1r0NVMf-j-9RwNcgls9ja0n1rGqSKN51_cRcvpE8 */ // 验证令牌 let verifyRes = jwt.verify(token); console.log(verifyRes); /* { code: 2, msg: 'valid', data: { id: 1, name: 'mark', iat: 1639106273, exp: 1639113473 } } */ // 解码令牌 let deRes = jwt.decoded(token, true); console.log(deRes); /* { header: { alg: 'HS256', typ: 'JWT' }, payload: { id: 1, name: 'mark', iat: 1639106273, exp: 1639113473 }, signature: '20O1r0NVMf-j-9RwNcgls9ja0n1rGqSKN51_cRcvpE8' } */
运行一下命令
node index.js测试是否正确。好了,
本文共计1120个文字,预计阅读时间需要5分钟。
在Node.js中使用JWT的方法概述:
1. 安装库:首先,需要安装jsonwebtoken库,用于生成和验证JWT。
2.生成JWT:使用库中的方法,结合用户的身份信息,生成一个JWT。
3.存储JWT:通常将JWT存储在客户端,如cookie或localStorage。
4.验证JWT:在每次请求时,验证JWT的有效性,以确保用户身份的合法性。
具体步骤如下:
1. 安装jsonwebtoken库:
bash npm install jsonwebtoken2. 生成JWT: javascript const jwt=require('jsonwebtoken');
const token=jwt.sign({ userId: 123 }, 'secretKey', { expiresIn: '1h' });
3. 存储JWT: 在客户端,可以使用localStorage或cookie来存储生成的JWT。
4. 验证JWT: 在服务器端,每次请求时验证JWT。 javascript const jwt=require('jsonwebtoken');
const verifyToken=(req, res, next)=> { const token=req.headers['authorization']; if (!token) return res.status(403).send('No token provided.');
jwt.verify(token, 'secretKey', (err, decoded)=> { if (err) return res.status(500).send('Failed to authenticate token.'); req.userId=decoded.userId; next(); }); };
希望这些信息对您有所帮助!
nodejs中要怎么使用jwt?下面本篇文章就来给大家从四个方面介绍一下jwt的使用,希望对大家有所帮助!
导语:由于nod… | =poad | 2021-10-15 | 1.0.1 | jwt appstore rator-core |安装jwt
我个人觉得这个jsonwebtoken很不错,本文就使用这个包。
npm i jsonwebtoken常见用法
- 签名
签名语法:
jwt.sign(payload, secretOrPrivateKey, [options, callback])。例如:
// 一般签名 var jwt = require('jsonwebtoken'); var token = jwt.sign({ foo: 'bar' }, 'secret'); // 加私钥签名 var privateKey = fs.readFileSync('private.key'); var token = jwt.sign({ foo: 'bar' }, privateKey, { algorithm: 'RS256'}); // 设置过期时间 jwt.sign({ data: 'bar' }, 'secret', { expiresIn: 60 * 60 }); // 1h
- 验证
验证语法:
jwt.verify(token, secretOrPublicKey, [options, callback])例如:
// 一般验证 var decoded = jwt.verify(token, 'secret'); console.log(decoded.foo) // bar // 公钥验证 var cert = fs.readFileSync('public.pem'); jwt.verify(token, cert, function(err, decoded) { console.log(decoded.foo) // bar });
- 解码
解码语法:
jwt.decode(token [, options])例如:
var decoded = jwt.decode(token, {complete: true}); console.log(decoded.header); console.log(decoded.payload);封装方法
根据安装配置里面的方法,可以根据自己的需要进行二次封装,更加适合自己的方法。
- 引入依赖包和配置
const jwt = require("jsonwebtoken"); const config = { secret: '2021123456**', time: 60 * 60, }
- 签名
function create (data, time) { let token = jwt.sign(data, config.secret, { algorithm: "HS256", expiresIn: time || config.time, }) return token; }
- 验证
function verify (token) { return jwt.verify(token, config.secret, function (err, decoded) { if (err) { return { code: 1, msg: 'invalid', data: null, } } else { return { code: 2, msg: 'valid', data: decoded, } } }) }
- 解码
function decoded (token, complete = true) { return jwt.decode(token, { complete, }); }
上面是比较简单的方法,如果你还想使用公钥私钥,可以用上面安装配置里面介绍的那样。
实战练习经过上面的封装方法,可以来实战演练一下,是否有效。
- 新建一个文件夹
test,新建一个文件index.js用于存放测试案例,jwt.js用于存储调用方法。mkdir test cd test npm init -y npm i jsonwebtoken
- jwt方法
// jwt.js const jwt = require('jsonwebtoken'); const config = { secret: '2021123456', // 密钥 time: 60*60, // 过期时间 } // 创建签名令牌 function create (data, time) { let token = jwt.sign(data, config.secret, { algorithm: 'HS256', expiresIn: time || config.time, }); return token; } // 验证令牌 function verify (token) { return jwt.verify(token, config.secret, function (err, decoded) { if (err) { return { code: 1, msg: 'invalid', data: null, } } else { return { code: 2, msg: 'valid', data: decoded, } } }) } // 解码令牌 function decoded (token, complete = true) { return jwt.decode(token, { complete, }); } const token = { create, verify, decoded, } module.exports = token;
- 创建token,验证token,解码token
// index.js const jwt = require('./jwt'); // 生成令牌 let token = jwt.create({'id': 1, 'name': 'mark'}, 60*60*2); console.log(token); /* eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJpZCI6MSwibmFtZSI6Im1hcmsiLCJpYXQiOjE2MzkxMDYyNzMsImV4cCI6MTYzOTExMzQ3M30. 20O1r0NVMf-j-9RwNcgls9ja0n1rGqSKN51_cRcvpE8 */ // 验证令牌 let verifyRes = jwt.verify(token); console.log(verifyRes); /* { code: 2, msg: 'valid', data: { id: 1, name: 'mark', iat: 1639106273, exp: 1639113473 } } */ // 解码令牌 let deRes = jwt.decoded(token, true); console.log(deRes); /* { header: { alg: 'HS256', typ: 'JWT' }, payload: { id: 1, name: 'mark', iat: 1639106273, exp: 1639113473 }, signature: '20O1r0NVMf-j-9RwNcgls9ja0n1rGqSKN51_cRcvpE8' } */
运行一下命令
node index.js测试是否正确。好了,

