RESTful API 使用 JWT 认证,快速上手

什么是 RESTful API?

RESTful API 是一种设计风格,它基于 HTTP 协议构建,使得客户端和服务端之间的通信变得简单、可扩展和可维护。RESTful API 的核心思想是将资源作为中心,使用 HTTP 方法(GET、POST、PUT、DELETE)对资源进行操作,使得 API 的设计更加符合实际场景。

什么是 JWT 认证?

JWT(JSON Web Token)是一种轻量级的认证方式,它将用户信息封装在一个 JSON 对象中,并使用密钥对其进行签名。在用户登录后,服务端会生成一个 JWT 并返回给客户端,客户端在每次请求时都需要携带 JWT,服务端通过验证 JWT 的有效性来确认用户的身份。

如何使用 RESTful API 和 JWT 认证?

1. 安装依赖

使用 Node.js 和 Express 框架,我们可以轻松地搭建一个 RESTful API 服务,并使用 jsonwebtoken 库实现 JWT 认证。首先需要安装以下依赖:

npm install express jsonwebtoken body-parser --save

2. 创建路由

在 Express 中,我们可以使用 Router 对象来定义路由。假设我们要创建一个用户管理的 API,那么可以创建一个 users.js 文件,并编写如下代码:

const express = require('express');
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser');

const router = express.Router();
router.use(bodyParser.json());

// 用户信息
const users = [
  { id: 1, username: 'admin', password: '123456' },
  { id: 2, username: 'guest', password: 'guest' }
];

// 登录接口
router.post('/login', (req, res) => {
  const { username, password } = req.body;

  // 验证用户名和密码
  const user = users.find(u => u.username === username && u.password === password);
  if (!user) {
    return res.status(401).json({ message: '用户名或密码错误' });
  }

  // 生成 JWT
  const token = jwt.sign({ id: user.id, username: user.username }, 'secret', { expiresIn: '1h' });

  // 返回 JWT
  res.json({ token });
});

// 获取用户信息接口
router.get('/profile', (req, res) => {
  // 获取 JWT
  const token = req.headers.authorization?.split(' ')[1];
  if (!token) {
    return res.status(401).json({ message: '未授权访问' });
  }

  // 验证 JWT
  try {
    const decoded = jwt.verify(token, 'secret');
    const user = users.find(u => u.id === decoded.id);
    if (!user) {
      return res.status(401).json({ message: '用户不存在' });
    }

    // 返回用户信息
    res.json({ id: user.id, username: user.username });
  } catch (err) {
    return res.status(401).json({ message: '无效的授权' });
  }
});

module.exports = router;

在上面的代码中,我们定义了两个接口:登录接口和获取用户信息接口。在登录接口中,我们验证用户名和密码,并生成 JWT 返回给客户端。在获取用户信息接口中,我们需要验证 JWT 的有效性,并返回用户信息。

3. 配置路由

在主文件 app.js 中,我们需要引入 users.js 并将其配置为路由:

const express = require('express');
const usersRouter = require('./routes/users');

const app = express();

app.use('/api/users', usersRouter);

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

4. 测试接口

现在我们可以使用 Postman 或其他工具测试接口了。首先需要使用登录接口获取 JWT,然后在每次请求时携带 JWT。例如,我们可以使用以下命令测试获取用户信息接口:

curl -H "Authorization: Bearer <JWT>" http://localhost:3000/api/users/profile

其中 <JWT> 是登录接口返回的 JWT。

总结

RESTful API 和 JWT 认证是现代 Web 应用的重要组成部分。使用 Node.js 和 Express 框架,我们可以轻松地搭建一个 RESTful API 服务,并使用 jsonwebtoken 库实现 JWT 认证。在编写 API 时,需要注意安全性和可维护性,以确保 API 的正常运行。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65c2ed9badd4f0e0ffce0365