JSON Web Token(JWT)是一种基于JSON的安全认证机制,它可以在不需要通过会话存储来验证用户身份的情况下,为前端和后端之间的数据传输提供安全性保障。在 Node.js 中使用 JWT 可以使你的认证过程更为安全和高效。本篇文章将介绍使用 Node.js 进行 JWT 身份验证的方法。
1. 安装 JWT
使用 JWT 需要先在项目中安装 JSON Web Token 库。可以通过 npm 在项目根目录下安装:
npm install jsonwebtoken
2. 创建和解码 JWT
JWT 是由头部、数据和签名三个部分组成的字符串,在使用 JWT 进行身份验证时,需要生成 JWT 并将其发送到前端,前端将 JWT 返还给后端进行验证。生成 JWT 的方法如下:
var jwt = require('jsonwebtoken'); var userData = { id: 12345 }; var token = jwt.sign(userData, 'privatekey', { expiresIn: '1h' }); console.log(token);
在上述代码中,我们使用了 sign() 方法来创建 JWT,第一个参数是要加密的数据(此处为 userData),第二个参数是用于生成签名的私钥,第三个参数指定了 JWT 的有效时间,默认为一小时。生成的 token 将返回给前端,进行后续的身份验证过程。解码 JWT 的方法也很简单:
var decoded = jwt.verify(token, 'privatekey'); console.log(decoded.id); // 12345
在上面的代码中,我们使用了 verify() 方法来解密 JWT,第一个参数是前端传输回来的 token,第二个参数是之前所使用的私钥,将返回保存在 JWT 中的用户数据。我们可以简单的获取其 id 属性。但是如果解码失败,将会返回一个错误。
3. 发送 JWT 请求
在生成和解码 JWT 之后,我们可以使用它们来进行简单快捷的身份验证。首先,将生成的 token 保存在请求头中:
var auth = function(req, res, next) { try { var token = req.headers.authorization.split(' ')[1]; var decoded = jwt.verify(token, 'privatekey'); req.user = decoded; next(); } catch (err) { return res.status(403).send({ message: '身份验证失败' }); } };
在上面的代码中,我们将 token 存储在请求头的 authorization 属性中,然后再解码它,如果解码成功,将用户数据保存在请求对象(req.user)中,方便后续的请求操作。Auth 中间件也可以检查请求头是否包含 token,如果不包含,将拒绝请求。
router.get('/privateRoute', auth, function(req, res) { return res.status(200).send({ message: '您已获得对此资源的访问权限' }); });
在上面的代码中,我们在一个需要身份验证的路由中使用 auth 中间件,如果解码成功,将向用户返回私有资源的访问权限。如果 JWT 身份验证失败,用户将会收到错误信息。
4. 总结
在 Node.js 中使用 JWT 进行身份验证可以使应用更安全和高效。在本文中,我们简单介绍了如何创建和解密 JWT,以及如何将 JWT 添加到请求头中以进行身份验证,并演示了一个简单的示例应用程序。使用 JWT 身份验证需要谨慎对待,确保所有私钥都是保密的,且用户的数据不能够被篡改。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/654d7e537d4982a6eb6ddaf4