📅  最后修改于: 2023-12-03 15:39:35.332000             🧑  作者: Mango
JWT,全称是 JSON Web Token。简而言之,JWT 就是用 JSON 对象来描述被称为“声明(claims)”的数据的一种轻便、安全的发送方式。这些声明可以用于身份验证和授权。JWT 包含头部、载荷和签名三部分。
头部 (Header):描述 JWT 的元数据。
载荷 (Payload):用于存储 JWT 所传递的实际数据。
签名 (Signature):签名 JWT 的部分,用于验证 JWT 是否有效。
在现代的前后端分离式开发中,为了确保 API 的安全性,并防止 CSRF 攻击和 XSS 攻击等,我们需要用到强大的验证和授权机制。JWT 正是我们解决这个问题的最佳选择之一。
除了安全以外,使用 JWT 还有其它优点:
在前端,我们可以使用许多 JWT 库来轻松地生成、解析和验证 JWT。例如,我们可以使用 jsonwebtoken
库来实现这些功能。下面是一个使用 jsonwebtoken
库来生成 JWT 的示例:
const jwt = require('jsonwebtoken');
const payload = { name: 'johndoe' };
const secret = 'mysecretkey';
const token = jwt.sign(payload, secret, { expiresIn: '1h' });
console.log(token);
在后端,我们使用 JWT 来验证和授权请求。实际上,这个流程与 cookie 验证非常相似。下面是使用 Express.js 和 jsonwebtoken
库进行 JWT 验证的示例:
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
const secret = 'mysecretkey';
app.post('/login', (req, res) => {
// 检查用户名和密码是否匹配
if (req.body.username === 'johndoe' && req.body.password === 'passw0rd') {
const payload = { name: 'johndoe' };
const token = jwt.sign(payload, secret, { expiresIn: '1h' });
res.cookie('token', token);
res.status(200).json({ message: '登录成功!' });
} else {
res.status(401).json({ message: '认证失败!' });
}
});
app.get('/users', (req, res) => {
const token = req.cookies.token;
if (!token) {
res.status(401).json({ message: '未授权的请求!' });
} else {
jwt.verify(token, secret, (err, decoded) => {
if (err) {
res.status(401).json({ message: '无效的令牌!' });
} else {
// 在这里可以执行一些操作,比如获取用户列表
const users = [{ name: 'johndoe' }, { name: 'janedoe' }];
res.status(200).json(users);
}
});
}
});
app.listen(3000, () => {
console.log('应用程序已启动!');
});
JWT 是监管全球API安全的稳健措施。它是一个干净且流行的令牌验证方法。它是「颁发不可伪造令牌」及其携带过程中形成的多层防护环境的核心。前端开发人员能够使用它在 Web 应用程序中进行身份验证,它是一种设计良好、结构清晰、运用于不同环境中的安全技能。