📅  最后修改于: 2023-12-03 15:32:27.079000             🧑  作者: Mango
JWT (Json Web Token) 是一个安全的跨网络的传输方式。它是一种基于 JSON 格式的 token,在网络上以明文的方式进行传输,但其不会被篡改或伪造。JWT 主要由三部分组成:头部(header)、载荷(payload)和签名(signature)。
头部通常由两部分组成:token 类型和算法。例如,在使用 JWT 的应用程序中,应该将头部设置为如下字符串:
{
"alg": "HS256",
"typ": "JWT"
}
载荷是 JWT 中用于存放用户信息的部分。 载荷形式可以任意,只要用户信息经过编码后,能够放在 JWT 中就行。
例如,以下是一个通过载荷存储用户信息的例子:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
其中,sub
表示用户的唯一标志;name
表示用户的姓名;iat
表示 JWT 的签发时间。
签名使用头部和载荷中的信息计算出来,用于保证 JWT 没有被篡改。
在 JavaScript 中使用 JWT 首先需要引入相应的库。目前比较流行的 JWT 库包括 jsonwebtoken 和 jsrsasign。这里以jsonwebtoken 为例,演示 JWT 的使用。
在终端中执行以下命令安装jsonwebtoken:
npm install jsonwebtoken --save
下面的示例展示了如何生成一个 JWT token。
const jwt = require('jsonwebtoken');
const secretKey = 'my_secret_key'; // 可以根据实际需求进行修改
const payload = {
name: 'John Doe'
};
const token = jwt.sign(payload, secretKey, { expiresIn: '1h' });
console.log(token);
在这个例子中,payload
是一个包含用户信息的 JSON。jwt.sign
方法可以用于生成 JWT token。第一个参数是 payload,第二个参数是签名的秘钥,第三个参数是一些可选的选项,例如 token 的过期时间。在这个例子中,我们将过期时间设置为 1 小时。
下面的示例演示了如何验证一个 JWT token。
const jwt = require('jsonwebtoken');
const secretKey = 'my_secret_key';
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
const decoded = jwt.verify(token, secretKey);
console.log(decoded);
jwt.verify()
方法可用于验证 token。在这个例子中,我们传递了预先生成的 token 和签名的秘钥。如果 token 有效,则 decoded
对象将包含解码的载荷信息。
使用 JWT 策略可以使数据传输更加安全。在 JavaScript 中,我们可以通过 jsonwebtoken
库来快速、简单地生成和验证 token。