JSON Web Token(JWT)是一种用于在网络应用之间安全传输信息的开放标准。JWT 由三部分组成:头部、载荷和签名。头部和载荷是 JSON 对象,签名是一个哈希值,用于验证消息的完整性。
在前端开发中,JWT 常用于用户认证和授权。本文将介绍如何在 Express.js 中使用 JWT 进行认证。
安装依赖
在开始之前,需要安装以下依赖:
- express:用于创建 Express 应用程序
- jsonwebtoken:用于生成和验证 JWT
- body-parser:用于解析 HTTP 请求的请求体
可以使用以下命令安装这些依赖:
npm install express jsonwebtoken body-parser --save
生成 JWT
在 Express.js 中生成 JWT 的过程包括以下几个步骤:
- 创建一个 JWT 的 payload 对象,其中包含需要传递的信息,例如用户 ID。
- 使用
jsonwebtoken
模块的sign
方法生成 JWT。该方法接受三个参数:payload 对象、密钥和选项。 - 将 JWT 作为响应的一部分返回给客户端。
示例代码如下:
// javascriptcn.com 代码示例 const express = require('express'); const jwt = require('jsonwebtoken'); const app = express(); const secretKey = 'my_secret_key'; app.get('/login', (req, res) => { const userId = req.query.userId; const payload = { userId }; const token = jwt.sign(payload, secretKey, { expiresIn: '1h' }); res.send({ token }); }); app.listen(3000, () => { console.log('Server is running on port 3000'); });
在上面的示例代码中,我们使用 jwt.sign
方法生成 JWT,并将其作为响应的一部分返回给客户端。expiresIn
选项指定 JWT 的过期时间,这里设置为 1 小时。
验证 JWT
在 Express.js 中验证 JWT 的过程包括以下几个步骤:
- 获取 HTTP 请求的 Authorization 头部,该头部应包含 JWT。
- 使用
jsonwebtoken
模块的verify
方法验证 JWT。该方法接受三个参数:JWT、密钥和选项。 - 如果验证成功,则将解码后的 JWT 存储在请求对象的
decoded
属性中,以便后续处理程序使用。
示例代码如下:
// javascriptcn.com 代码示例 const express = require('express'); const jwt = require('jsonwebtoken'); const app = express(); const secretKey = 'my_secret_key'; app.use((req, res, next) => { const authHeader = req.headers.authorization; if (authHeader) { const token = authHeader.split(' ')[1]; jwt.verify(token, secretKey, (err, decoded) => { if (err) { return res.sendStatus(403); } req.decoded = decoded; next(); }); } else { res.sendStatus(401); } }); app.get('/profile', (req, res) => { const userId = req.decoded.userId; res.send(`User ID: ${userId}`); }); app.listen(3000, () => { console.log('Server is running on port 3000'); });
在上面的示例代码中,我们使用 Express.js 的中间件函数来验证 JWT。如果 JWT 验证失败,则返回 403 状态码,否则将解码后的 JWT 存储在请求对象的 decoded
属性中,以便后续处理程序使用。
总结
本文介绍了如何在 Express.js 中使用 JWT 进行认证。通过本文的示例代码,我们可以了解到 JWT 的基本用法,并掌握如何在 Express.js 中生成和验证 JWT。
在实际开发中,JWT 可以帮助我们实现用户认证和授权,提高应用程序的安全性。因此,掌握 JWT 的使用方法是每个前端开发人员必备的技能之一。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6562f9edd2f5e1655dcb4ac7