JSON Web Token (JWT) 是一种安全的身份验证和授权机制,常用于前端与后端通信,尤其是在前后端分离的架构中。JWT 是一个由三个部分组成的字符串,这些部分由点号 (.) 分隔,并且每部分都经过Base64编码。 1. 头部(Header): JWT 的头部包含令牌的类型(`typ`,默认为JWT)和所使用的算法(`alg`,如HS256)。头部通常编码后看起来像 `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9`。 2. 载荷(Payload): 载荷部分携带实际信息,如用户的ID、名称或其他定制声明。它也可能会包含令牌的签发时间(`iat`)和过期时间(`exp`)。例如,编码后的载荷可能为 `eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ`。 3. 签名(Signature): 签名是通过将编码后的头部和载荷连接起来,然后使用一个密钥(secretKey)和指定的算法(如HMACSHA256)进行加密得到的。这确保了如果任何前两部分的数据被篡改,签名将不再匹配,从而检测到潜在的安全威胁。 在实际应用中,JWT 的生成和验证过程如下: **生成 Token**: - 当用户成功登录时,服务器会使用用户的验证信息(如用户名和密码)来生成一个JWT。 - 使用第三方库如`jsonwebtoken`,调用`sign`方法,传入载荷(Payload)、密钥(secretKey)和选项(如过期时间)来生成token。 ```javascript const crypto = require("crypto"); const jwt = require("jsonwebtoken"); let userList = []; class UserController { static async login(ctx) { // ... const token = jwt.sign( { name: result.name }, // Payload "test_token", // Secret { expiresIn: 60 * 60 } // 过期时间 ); // ... } } ``` **验证 Token**: - 在用户访问受保护的资源或接口时,前端会将Token发送到后端。 - 后端会使用相同的密钥和`jsonwebtoken`库的`verify`方法来验证Token的有效性、未过期以及完整性。 ```javascript class ResourceController { static async protectedResource(ctx) { const token = ctx.headers.authorization; try { const decoded = jwt.verify(token, "test_token"); // 解码后的Payload数据在decoded对象中 // 接下来可以使用decoded数据进行权限检查 } catch (err) { // 错误处理,如Token无效或已过期 } } } ``` JWT 提供了一种轻量级的鉴权方式,减少了频繁的数据库查询。然而,需要注意的是,因为Token是存储在客户端的,所以必须小心处理,防止被拦截或滥用。另外,为了提高安全性,应当定期刷新Token(通过Refresh Token机制),并确保密钥在服务器端安全保管。
- 粉丝: 20
- 资源: 7163
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- All For One (渗透测试扫描器).zip
- AJCDN渗透DPI数据TG@AJCDN003.zip
- 深度学习ResNet网络架构详解及其应用场景
- JAVAjava电商网站源码带前后台数据库 MySQL源码类型 WebForm
- 2025版.人教A版.选择性必修 第一册.数学.5·3高中同步.zip
- java前后端分离MES生产执行管理系统源码数据库 MySQL源码类型 WebForm
- 【java毕业设计】教师授课管理系统源码(完整前后端+说明文档+LW).zip
- 基于STM32F103C8T6的智能家居控制系统源码+文档说明(高分毕业设计)
- Windows环境下OpenSSH服务的安装与启动配置指南
- MT4缠论指标免费使用无限制,无需续费及绑定电脑