📜  如何使用 Node.js 创建和验证 JWT?(1)

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

如何使用 Node.js 创建和验证 JWT?

JWT (JSON Web Token) 是一种基于 JSON 格式的轻量级身份认证和授权规范。它允许我们用于在传输过程中安全地传递信息 (claims),并且经过签名处理。

在 Node.js 中,我们可以使用一些库来创建和验证 JWT。

安装依赖

在开始之前,请确认你已经安装了 Node.js 环境。接下来我们需要安装两个依赖库:jsonwebtoken 和 express。

npm install jsonwebtoken express --save
创建 JWT

使用 jsonwebtoken 库创建 JWT,我们需要一个私钥和一些要包含的信息。

以下是一个简单的示例:

const express = require('express');
const jwt = require('jsonwebtoken');

const app = express();

app.get('/', (req, res) => {
  const privateKey = 'mysecretkey'; // 这里是你的私钥,应该从环境变量获取

  const userData = { // 用户信息
    name: '张三',
    isAdmin: true
  };

  const token = jwt.sign(userData, privateKey, { expiresIn: '1 hour' }); // 创建 JWT

  res.send(token); // 返回 JWT
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

在这个示例中,我们使用 privateKey 和 userData 创建一个 JWT,并将其返回给客户端。expiresIn 参数表示 JWT 的有效期,这里设置为 1 小时。

验证 JWT

在服务端使用 JWT,我们需要验证它是否被篡改,并确认它是否过期。

以下是一个简单的示例:

const express = require('express');
const jwt = require('jsonwebtoken');

const app = express();

app.get('/', (req, res) => {
  const token = req.headers.authorization.split(' ')[1]; // 从请求头获取 JWT

  try {
    const privateKey = 'mysecretkey'; // 这里是你的私钥,应该从环境变量获取

    const userData = jwt.verify(token, privateKey); // 验证 JWT,并返回用户信息

    console.log('user:', userData);

    res.send('ok');
  } catch (error) {
    console.log('error:', error);

    res.status(401).send('Unauthorized'); // JWT 无效或过期
  }
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

在这个示例中,我们从请求头获取 JWT,然后使用 verify() 方法对其进行验证。如果 JWT 无效或过期,我们将返回 401 状态码。

结论

使用 Node.js 创建和验证 JWT 很简单。使用 jsonwebtoken 和 express 库,我们可以轻松地在应用程序中使用 JWT 进行身份验证和授权。

完整的代码示例可以在 GitHub 上找到。