📜  jwt 策略 - Javascript (1)

📅  最后修改于: 2023-12-03 15:32:27.079000             🧑  作者: Mango

JWT 策略 - JavaScript

什么是 JWT?

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 没有被篡改。

为什么要使用 JWT?
  1. 支持跨平台:JWT 可以在不同的环境之间进行跨平台传输(例如,web、iOS、Android等);
  2. 安全性高:JWT 的头部和载荷是经过 Base64 编码的,可以保护其中包含的信息不被篡改;
  3. 高效性:JWT 本身没有状态,因此不需要在服务器端保存额外的信息。
如何使用 JWT?

在 JavaScript 中使用 JWT 首先需要引入相应的库。目前比较流行的 JWT 库包括 jsonwebtokenjsrsasign。这里以jsonwebtoken 为例,演示 JWT 的使用。

安装jsonwebtoken

在终端中执行以下命令安装jsonwebtoken:

npm install jsonwebtoken --save
生成 JWT Token

下面的示例展示了如何生成一个 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

下面的示例演示了如何验证一个 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。