当前位置:首页 > 编程笔记 > 正文
已解决

JWT概念(案例代码)

来自网友在路上 154854提问 提问时间:2023-11-11 14:23:33阅读次数: 54

最佳答案 问答题库548位专家为你答疑解惑

JWT(JSON Web Token)是一种在网络应用间传递信息的标准方法,它使用JSON对象作为发出方和接收方之间的交换格式,用于验证和授权。JWT由三部分组成:Header、Payload和Signature。

Header:包含了JWT的类型、加密算法等信息。

Payload:包含了存放在JWT中传输的信息,也叫做声明(claim)。声明分为三种类型:注册声明(registered claims)、公共声明(public claims)和私人声明(private claims)。

Signature:用于验证消息的完整性并防止篡改。Signature由Header中指定的加密算法和密钥生成。

JWT的工作流程大致如下:

1.用户通过用户名和密码进行身份验证

2.服务器验证用户身份成功后,生成一个JWT并将其发送给用户

3.用户之后的每个请求都将在JWT中携带身份信息

4.服务器检查JWT的签名并验证用户是否有权访问请求的资源

JWT的优点:

1、JWT 是基于标准的JSON格式,易于生成和解析。

2、JWT 包括了签名信息,可以验证消息的完整性并防止篡改。

3、JWT 可以轻松传输在多种环境,例如移动设备、浏览器和服务器,因为它们只需要通过HTTP传输。

4、 JWT是无状态的,即保存在客户端,适合分布式项目开发。

5、JWT可以有效防止CSRF攻击。因为JWT需要服务器签名,黑客无法伪造,JWT中包含终端用户的信息,所以对数据的访问可以追踪。

以下是一个简单的使用 JWT 实现身份验证的示例代码:

  1. 安装相关依赖
npm install express jsonwebtoken body-parser

  1. 创建一个 Express 应用
const express = require('express');
const bodyParser = require('body-parser');
const jwt = require('jsonwebtoken');const app = express();app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());// 设置密钥
const SECRET_KEY = 'my_secret_key';// 登录路由
app.post('/login', (req, res) => {const { username, password } = req.body;// 模拟用户验证if (username === 'admin' && password === 'admin') {// 生成 JWTconst token = jwt.sign({ username }, SECRET_KEY, { expiresIn: '1h' });res.json({ success: true, token });} else {res.json({ success: false, message: 'Invalid username or password' });}
});// 需要身份验证的路由
app.get('/protected', (req, res) => {const token = req.headers.authorization;if (!token) {// 返回未授权错误return res.status(401).json({ success: false, message: 'Unauthorized' });}// 验证 JWTjwt.verify(token, SECRET_KEY, (err, decoded) => {if (err) {return res.status(401).json({ success: false, message: 'Invalid token' });}// 在这里进行身份验证后,可以放行请求res.json({ success: true, message: 'Welcome, ' + decoded.username });});
});// 启动应用
app.listen(3000, () => console.log('App listening on port 3000'));

在上面的代码中,我们首先创建了一个 Express 应用,并使用 bodyParser 中间件解析请求体。

然后,我们定义了一个 POST /login 路由,在这个路由中,我们模拟了用户验证过程,并使用 jsonwebtoken 库生成了一个 JWT,并返回到客户端。

最后,我们定义了一个 GET /protected 路由,该路由需要进行身份验证。在这个路由中,我们首先获取请求头中的 Authorization 字段,然后使用 jsonwebtoken 库验证 JWT。如果 JWT 验证通过,则进行身份认证,并返回请求成功的响应;否则返回未授权的响应。

在实际应用中,我们可以将上述代码根据具体需求进行调整和拓展,以实现更灵活的身份验证机制。

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"JWT概念(案例代码)":http://eshow365.cn/6-37669-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!