返回

从零学会:JWT 构建接口权限验证系统

前端

引言

在构建互联网应用程序时,接口权限验证是一个必不可少的环节。它可以确保只有授权用户才能访问特定资源,从而保护数据安全。常用的接口权限验证方案有很多,如 OAuth、JWT 等。本文将重点介绍 JWT 的使用,并详细讲解其原理和实现步骤。

JWT 简介

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在不同的系统之间安全地传输信息。它采用 JSON 格式,并使用数字签名来保证数据的完整性和真实性。

JWT 由三个部分组成:

  • 头部(Header) :包含 JWT 的元数据,如算法类型、令牌类型等。
  • 主体(Payload) :包含需要传递的数据,如用户 ID、角色、权限等。
  • 签名(Signature) :使用头部和主体计算得出的哈希值,用于验证令牌的真实性。

JWT 的工作原理

JWT 的工作原理如下图所示:

JWT 的工作原理

  1. 服务端生成 JWT 令牌,并返回给客户端。
  2. 客户端将 JWT 令牌存储在本地(如 Cookie 或 localStorage)。
  3. 客户端在后续请求中携带 JWT 令牌。
  4. 服务端收到请求后,验证 JWT 令牌的真实性和有效性。
  5. 如果 JWT 令牌有效,则允许客户端访问受保护的资源。

使用 JWT 构建接口权限验证系统

1. 服务端配置 JWT

首先,需要在服务端配置 JWT。具体步骤如下:

  1. 安装 jsonwebtoken 第三方工具包。
  2. 引入 jwt
  3. 在控制器中生成 token,并进行返回。
const jwt = require('jsonwebtoken');

const generateToken = (payload) => {
  return jwt.sign(payload, 'secret', { expiresIn: '1h' });
};

app.post('/login', (req, res) => {
  const user = req.body;
  const token = generateToken({ id: user.id, role: user.role });
  res.json({ token });
});

2. 安装 basic-auth

接下来,需要在客户端安装 basic-auth

npm install basic-auth

3. 引入 basic-auth

然后,在客户端引入 basic-auth

const basicAuth = require('basic-auth');

4. 获取到用户传来的 token

接着,需要在客户端获取到用户传来的 token。

const { username, password } = basicAuth(req);
const token = username;

5. 验证

最后,需要在服务端验证 token 的真实性和有效性。

jwt.verify(token, 'secret', (err, decoded) => {
  if (err) {
    res.status(401).json({ error: 'Unauthorized' });
  } else {
    req.user = decoded;
    next();
  }
});

总结

本文详细讲解了如何使用 JWT 构建接口权限验证系统。通过 JWT,我们可以轻松实现用户身份验证和资源授权,从而保护数据安全。