📜  jwt 验证 nodejs - Javascript (1)

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

JWT 验证 Node.js

什么是 JWT

JWT (JSON Web Token) 是一种用于身份验证和授权的 Web 标准。它是一种用于描述交换信息的简洁、安全、URL 安全的方式。JWT 为 Web 应用提供了一种基于 Token 的认证方式,是目前最流行的认证方式之一。

如何使用 JWT
安装 JWT

使用 Node.js 开发 Web 应用需要安装 jsonwebtoken 模块。

npm install jsonwebtoken
生成 JWT

下面是一个用于生成 JWT 的示例代码:

const jwt = require("jsonwebtoken");

const payload = {
  user_id: 1,
  username: "testuser",
};
const secret_key = "secret_key";

jwt.sign(payload, secret_key, { expiresIn: "1h" }, (err, token) => {
  if (err) {
    console.log(err);
  } else {
    console.log(token);
  }
});

该代码在 payload 中存储了用户信息,使用 jwt.sign 方法签发了一个 JWT,并将其输出到控制台上。

验证 JWT

下面是一个用于验证 JWT 的示例代码:

const jwt = require("jsonwebtoken");

const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InRlc3R1c2VyIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE1MTYyNDA2MjJ9._jNtJe1d67ZjNvHg4TzHYRsCaO1vRiOkrqA02jQvK0Q";
const secret_key = "secret_key";

jwt.verify(token, secret_key, (err, user) => {
  if (err) {
    console.log(err);
  } else {
    console.log(user);
  }
});

该代码尝试验证一个给定的 JWT,并输出其中存储的用户信息。

集成 JWT 到 Node.js 应用中

可以通过中间件函数将 JWT 集成到 Node.js 应用中,以下是一个示例中间件:

const jwt = require("jsonwebtoken");

const secret_key = "secret_key";

function authenticateToken(req, res, next) {
  const authHeader = req.headers["authorization"];
  const token = authHeader && authHeader.split(" ")[1];

  if (token == null) return res.sendStatus(401);

  jwt.verify(token, secret_key, (err, user) => {
    if (err) return res.sendStatus(403);
    req.user = user;
    next();
  });
}

module.exports = authenticateToken;

该中间件可以应用于需要 JWT 认证的路由中,例如:

const express = require("express");
const authenticateToken = require("./middleware/authenticateToken");

const app = express();

app.get("/api/user", authenticateToken, (req, res) => {
  res.json({
    user_id: req.user.user_id,
    username: req.user.username,
  });
});

该路由接受 /api/user 请求,并要求在请求头中包含一个 JWT。如果 JWT 验证成功,将会返回存储在 JWT 中的用户信息。

总结

JSON Web Token 是一种流行的认证方式,它为 Web 应用提供了一种基于 Token 的认证方式。在 Node.js 中,可以通过安装 jsonwebtoken 模块使用 JWT,在应用程序中进行验证和集成。