📜  必须提供 jwt - Javascript (1)

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

必须提供 JWT - Javascript

什么是 JWT

JWT,全称是 JSON Web Token。简而言之,JWT 就是用 JSON 对象来描述被称为“声明(claims)”的数据的一种轻便、安全的发送方式。这些声明可以用于身份验证和授权。JWT 包含头部、载荷和签名三部分。

头部 (Header):描述 JWT 的元数据。

载荷 (Payload):用于存储 JWT 所传递的实际数据。

签名 (Signature):签名 JWT 的部分,用于验证 JWT 是否有效。

JWT 的重要性

在现代的前后端分离式开发中,为了确保 API 的安全性,并防止 CSRF 攻击和 XSS 攻击等,我们需要用到强大的验证和授权机制。JWT 正是我们解决这个问题的最佳选择之一。

除了安全以外,使用 JWT 还有其它优点:

  • 跨语言和跨平台方便;
  • 轻巧,可以通过 URL、POST 数据和 HTTP 头部传递;
  • 减少需要进行数据库查询,提高整体响应时间。
如何使用 JWT

在前端,我们可以使用许多 JWT 库来轻松地生成、解析和验证 JWT。例如,我们可以使用 jsonwebtoken 库来实现这些功能。下面是一个使用 jsonwebtoken 库来生成 JWT 的示例:

const jwt = require('jsonwebtoken');
const payload = { name: 'johndoe' };
const secret = 'mysecretkey';
const token = jwt.sign(payload, secret, { expiresIn: '1h' });
console.log(token);

在后端,我们使用 JWT 来验证和授权请求。实际上,这个流程与 cookie 验证非常相似。下面是使用 Express.js 和 jsonwebtoken 库进行 JWT 验证的示例:

const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
const secret = 'mysecretkey';

app.post('/login', (req, res) => {
  // 检查用户名和密码是否匹配
  if (req.body.username === 'johndoe' && req.body.password === 'passw0rd') {
    const payload = { name: 'johndoe' };
    const token = jwt.sign(payload, secret, { expiresIn: '1h' });
    res.cookie('token', token);
    res.status(200).json({ message: '登录成功!' });
  } else {
    res.status(401).json({ message: '认证失败!' });
  }
});

app.get('/users', (req, res) => {
  const token = req.cookies.token;
  if (!token) {
    res.status(401).json({ message: '未授权的请求!' });
  } else {
    jwt.verify(token, secret, (err, decoded) => {
      if (err) {
        res.status(401).json({ message: '无效的令牌!' });
      } else {
        // 在这里可以执行一些操作,比如获取用户列表
        const users = [{ name: 'johndoe' }, { name: 'janedoe' }];
        res.status(200).json(users);
      }
    });
  }
});

app.listen(3000, () => {
  console.log('应用程序已启动!');
});
结语

JWT 是监管全球API安全的稳健措施。它是一个干净且流行的令牌验证方法。它是「颁发不可伪造令牌」及其携带过程中形成的多层防护环境的核心。前端开发人员能够使用它在 Web 应用程序中进行身份验证,它是一种设计良好、结构清晰、运用于不同环境中的安全技能。