返回
Node 入门项目:利用 Koa2 构建一个简单的 JWT 认证系统
前端
2023-09-08 16:28:50
什么是 JWT
JWT 全称为 JSON Web Token,是一种用于在网络上安全地传输信息的小型、自包含的 JSON 对象。JWT 通常用于在两个系统之间传递用户身份信息,例如客户端和服务器。
为什么使用 JWT
JWT 是一种流行的认证方式,因为它具有以下优点:
- 紧凑性: JWT 是非常紧凑的,可以轻松地在网络上传输。
- 安全性: JWT 是安全的,因为它是使用数字签名算法(例如 HMAC SHA256)进行签名的。
- 无状态: JWT 是无状态的,这意味着服务器不需要存储任何用户会话信息。
使用 Koa2 实现 JWT 认证
现在我们了解了 JWT 是什么,以及为什么使用它,让我们来看看如何使用 Koa2 实现 JWT 认证。
安装依赖
首先,我们需要安装 Koa2 和 jsonwebtoken 包:
npm install koa2 jsonwebtoken
创建 JWT 签名密钥
接下来,我们需要创建一个 JWT 签名密钥。这个密钥将用于对 JWT 进行签名和验证。
const secret = 'YOUR_SECRET_KEY';
编写 JWT 中间件
现在我们可以编写 JWT 中间件了。这个中间件将验证传入请求的 JWT,并将其添加到请求的上下文对象中。
const jwt = require('jsonwebtoken');
const authMiddleware = async (ctx, next) => {
const token = ctx.request.headers['authorization'];
if (!token) {
ctx.status = 401;
ctx.body = {
message: 'Unauthorized',
};
return;
}
try {
const decoded = jwt.verify(token, secret);
ctx.state.user = decoded;
await next();
} catch (err) {
ctx.status = 401;
ctx.body = {
message: 'Unauthorized',
};
}
};
使用 JWT 中间件
现在我们可以使用 JWT 中间件了。我们将把它添加到我们的 Koa2 应用的路由中。
const app = new Koa2();
app.use(authMiddleware);
app.get('/protected', async (ctx) => {
ctx.body = {
message: 'Protected resource',
};
});
app.listen(3000);
生成 JWT
最后,我们需要编写一个端点来生成 JWT。这个端点将接收用户名和密码,并返回一个 JWT。
app.post('/login', async (ctx) => {
const { username, password } = ctx.request.body;
if (username === 'admin' && password === 'password') {
const token = jwt.sign({ username }, secret, { expiresIn: '1h' });
ctx.body = {
token,
};
} else {
ctx.status = 401;
ctx.body = {
message: 'Unauthorized',
};
}
});
结论
现在我们已经构建了一个使用 Koa2 的简单 JWT 认证系统。我们可以使用这个系统来保护我们的 API 端点,并确保只有经过授权的用户才能访问它们。