📅  最后修改于: 2023-12-03 14:43:37.759000             🧑  作者: Mango
JSON Web Token(JWT)是一种颁发和认证令牌的工具。在服务端生成一个 JWT 令牌,在客户端存储该令牌,在请求服务器时在 HTTP 请求头中发送该令牌,服务器可以通过解密该令牌得到用户信息,完成认证流程。
npm 上有很多 JWT 相关的包,其中最受欢迎的几个是 jsonwebtoken,jsonwebtoken-promisified,jsonwebtoken-express 。
jsonwebtoken
模块提供生成 JWT 和验证 JWT 的功能。通过该模块,可以在服务端生成对应的 JWT,然后在客户端通过 AJAX 请求时发送给服务器。服务器可以解析 JWT,获得用户信息。
$ npm install jsonwebtoken
const jwt = require('jsonwebtoken');
const payload = { /* some data */ };
const secret = 'my_secret_key';
const token = jwt.sign(payload, secret);
console.log(token);
const jwt = require('jsonwebtoken');
const token = 'eyJhbGciO ... zUwOTAyfQ.tgSfLpX9zTfTeePCNK1Gkg';
const secret = 'my_secret_key';
const decoded = jwt.verify(token, secret);
console.log(decoded);
jsonwebtoken-promisified
是 jsonwebtoken
的 Promise 版本,提供了对 jsonwebtoken
的 Promise 封装,使用起来更加简单和方便。
$ npm install jsonwebtoken-promisified
const jwt = require('jsonwebtoken-promisified');
const payload = { /* some data */ };
const secret = 'my_secret_key';
jwt.sign(payload, secret)
.then(token => {
console.log(token);
})
.catch(err => {
console.log('Error:', err.message);
});
const token = 'eyJhbGciO ... zUwOTAyfQ.tgSfLpX9zTfTeePCNK1Gkg';
jwt.verify(token, secret)
.then(decoded => {
console.log(decoded);
})
.catch(err => {
console.log('Error:', err.message);
});
jsonwebtoken-express
是 jsonwebtoken
在 express
中使用的简化版。通过在 express
中使用 jsonwebtoken-express
,可以更加方便的生成和验证 JWT 令牌。
$ npm install jsonwebtoken-express
const express = require('express');
const jwt = require('jsonwebtoken-express');
const app = express();
app.use(jwt({ secret: 'my_secret_key' }));
app.get('/', (req, res) => {
console.log(req.jwt);
res.send('Hello World!');
});
app.listen(3000, () => console.log('Server started!'));
总结一下,JWT 主要在服务端生成,然后在客户端存储该令牌,在请求服务器时在 HTTP 请求头中发送该令牌。服务器可以通过解密该令牌得到用户信息,完成认证流程。npm 上有很多 JWT 相关的包,其中最受欢迎的几个是 jsonwebtoken,jsonwebtoken-promisified,jsonwebtoken-express。使用起来非常简单,只需要几行代码就可以实现 JWT 的颁发和认证。