JWT(JSON Web Token)是一种开放标准 (RFC 7519),用于在网络应用环境间安全地将信息作为 JSON 对象传输。它通常用于身份验证和信息交换。JWT 的主要优势在于其简洁性和安全性。
JWT 结构
JWT 由三部分组成,每部分都使用 Base64 编码:
- 头部:包含令牌的类型(即 JWT)和所使用的签名算法(如 HMAC SHA256 或 RSA)。
- 载荷:包含声明。声明是关于实体(通常是用户)和其他数据的声明。
- 签名:用于验证消息在传输过程中没有被更改,并且,对于使用私钥签名的令牌,它还可以验证 JWT 的发送方是否是它所声称的人。
示例 JWT
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
安装依赖
首先,你需要安装 jsonwebtoken
和 express-jwt
来处理 JWT 相关的操作。
npm install jsonwebtoken express-jwt
创建 JWT
在创建 JWT 之前,需要先定义一个函数来生成 JWT。这个函数将接收用户的 ID、名称等信息,并返回一个 JWT 字符串。
-- -------------------- ---- ------- ----- --- - ------------------------ -------- ------------------- - ----- ----- - --------- - --- -------- ----- --------- -- ------------------ - ---------- ---- - -- ------ -- ------ ------ - -- ---- ----- ---- - - --- -- ----- ----- ---- -- ----- ----- - -------------------- -------------------
验证 JWT
为了验证 JWT,你需要创建一个中间件来检查请求中的 JWT 是否有效。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ---------- ----- --- - ------------------------ ------------------------ ------------------ ----- ---- -- - ----- ---- - - --- -- ----- ----- ---- -- ----- ----- - -------------------- ---------- ----- --- --- ------------- ---- ----- -- - ----- ----- - ----------------------------- -- -------- ------ ---------------------- ----- ------ -------- --- ----- ---------- --- ----------------- ------------------ ------------- -------- - -- ----- ------ ---------------------- ----- ------ -------- ------- -- ------------ ------- --- -- ----------------------- ---------- - ----------- ------- --- --- --------------------- ----- ---- -- - --------------- ---------------- --- ---------------- -- -- ------------------- ------- -- ---- --------
处理错误
在实际应用中,你需要处理各种可能出现的错误,例如无效的 JWT、JWT 已过期或 JWT 签名不匹配等问题。你可以通过捕捉异常来处理这些错误,并向客户端返回适当的响应。
app.use((err, req, res, next) => { if (err.name === 'UnauthorizedError') { res.status(401).send({ auth: false, message: 'Invalid token.' }); } else { res.status(500).send({ error: 'Internal server error' }); } });
总结
通过上述步骤,你已经了解了如何在 Node.js 应用程序中使用 JWT。JWT 是一种非常方便且强大的工具,可以用于保护你的 API 并确保只有经过授权的用户才能访问受保护的资源。希望本教程能帮助你在实际项目中更有效地使用 JWT。