介绍
JSON Web Tokens(JWT)是一种开放的行业标准(RFC 7519),用于在网络应用中安全地传输声明信息。JWT 为验证和认证提供了一种简单但强大的方法。Node.js 具有大量的 JWT 库可供使用,其中之一就是 node.jwt 。
node.jwt 是一个 Node.js 实现的 JWT 库,提供了创建、验证和解码 JWT 的函数。本文将介绍如何使用 node.jwt 来加强您的应用程序的安全性。
安装
node.jwt 可以通过 npm 包管理器进行安装。 在终端中运行以下命令将 node.jwt 添加到您的项目中:
npm install jsonwebtoken
使用
在使用 node.jwt 之前,您需要了解以下术语:
- Payload:JWT 包含的信息。
- Secret:用于签署和验证 JWT 的字符串。
- Header:JWT 包含的元数据。
使用 node.jwt 创建和验证 JWT 的基本步骤如下:
创建 JWT
要创建 JWT,您需要指定包含在负载中的信息以及用于签名的密钥。
const jwt = require('jsonwebtoken'); const token = jwt.sign({foo: 'bar'}, 'secret'); console.log(token);
您可以使用第二个参数(可选),指定 JWT 的过期时间。例如,下面的代码将在 1 小时后过期:
const token = jwt.sign({foo: 'bar'}, 'secret', {expiresIn: '1h'});
验证 JWT
要验证 JWT,您需要提供 JWT 本身以及用于签名的密钥。验证背后的概念是检查数字签名是否匹配。
const jwt = require('jsonwebtoken'); const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.2Xv19eB7VjKaNt8w7VvdDDv1LNtyCEmYgjKazJ-A7XQ'; try { const decoded = jwt.verify(token, 'secret'); console.log(decoded.foo); } catch (e) { console.log('Error: Invalid token'); }
如果 JWT 已过期,验证将失败:
const jwt = require('jsonwebtoken'); const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.MywFDVBkfoiC_5NJy2FjR_JH6bFQ6CN1CSPGYaXZIBo'; try { const decoded = jwt.verify(token, 'secret'); console.log(decoded.foo); } catch (e) { console.log('Error: Invalid token'); }
您还可以检查 JWT 的头信息。例如,下面的代码使用 jwt.decode
函数来返回 JWT 的可读部分:
const jwt = require('jsonwebtoken'); const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.MywFDVBkfoiC_5NJy2FjR_JH6bFQ6CN1CSPGYaXZIBo'; const decodedToken = jwt.decode(token, {complete: true}); console.log(decodedToken.header);
总结
在这篇文章中,我们学习了如何使用 node.jwt 创建和验证 JWT。记住,在使用 JWT 时,安全性很重要。因此,我们建议您不要将您的密钥存储在源代码中,也不要将它们共享给其他人。
示例代码
-- -------------------- ---- ------- ----- --- - ------------------------ -- -- --- ----- ----- - -------------- ------- --------- ----------- ------- ------------------- -- -- --- --- - ----- ------- - ----------------- ---------- ------------------------- - ----- --- - ------------------- ------- -------- - -- -- --- ---- ----- ------------ - ----------------- ---------- ------- ---------------------------------
输出:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.2Xv19eB7VjKaNt8w7VvdDDv1LNtyCEmYgjKazJ-A7XQ bar { alg: 'HS256', typ: 'JWT' }
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005671381e8991b448e3645