JWT (JSON Web Token) 是一种在网络应用中传递信息的安全方式,由于它具有不可伪造性,所以被广泛地应用于身份认证和信息传递中。
trek-jwt 是一个轻量级的、基于 Promise 的 JWT 包,它可以帮助开发者轻松地生成、解密、验证 JWT。下面让我们来学习如何使用这个 npm 包。
安装 trek-jwt
首先,我们需要在项目中安装 trek-jwt 包,可以使用 npm 安装:
npm install trek-jwt --save
生成 JWT
使用 trek-jwt 生成 JWT 非常简单,只需要传入一个 payload (负载) 和一个 secret (密钥) 即可:
-- -------------------- ---- ------- ----- --- - -------------------- -- -- --- ----- ------- - - ------- ---- --------- ----- -- ----- ------ - --- ------ ----- ----- ----- - ----- ----------------- --------
在这个例子中,我们传入了一个包含 userId 和 username 的 payload,以及一个字符串类型的 secret。在使用 jwt.sign 方法生成 JWT 后,我们可以得到类似如下的 token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEyMywidXNlcm5hbWUiOiJ0b20iLCJpYXQiOjE1MTYyMzkwMjJ9.RwvdT24Twy0jyJB0sQQww2sDJgKuuNc8sFhGOiJZbBI
这个 token 中包含了三部分内容,它们之间用点号 "." 分隔开来:
Header (头部):由两部分组成,第一部分是使用的加密算法,第二部分是 JSON Web Token 的类型,头部用 Base64Url 编码后得到。
Payload (负载):包含了一些数据,比如用户信息,用 Base64Url 编码后得到。
Signature (签名):使用 Header 中指定的算法和指定的 secret 值生成签名,用 Base64Url 编码后得到。
解密 JWT
在客户端或服务端使用 JWT 时,需要解密它得到其中的信息。使用 trek-jwt 可以轻松地解密 JWT:
// 从 JWT 中解密得到信息 const decoded = await jwt.verify(token, secret); console.log(decoded);
在这个例子中,我们传入了生成得到的 token 和刚刚使用的 secret 字符串,使用 jwt.verify 方法即可解密得到信息。解密后的结果 decoded 和我们传入的payload对象相同。
验证 JWT
trek-jwt 还提供了一种方法来验证一个 JWT 是否有效:
const valid = await jwt.verify(token, secret, { maxAge: '1h' }); console.log(valid); // true 或 false
在这个例子中,我们传入了生成得到的 token 和刚刚使用的 secret,还传入了一个选项对象,maxAge 选项指定了 JWT 的过期时间 (1 小时)。如果 JWT 过期或者验证不通过,返回 false,否则返回 true。
示例代码
最后,我们来看一下完整的示例代码:
-- -------------------- ---- ------- ----- --- - -------------------- -- -- --- ----- ------- - - ------- ---- --------- ----- -- ----- ------ - --- ------ ----- ----- ----- - ----- ----------------- -------- ------------------- -- - --- ------- ----- ------- - ----- ----------------- -------- --------------------- -- -- --- ---- ----- ----- - ----- ----------------- ------- - ------- ---- --- -------------------
总结
trek-jwt 是一个简单易用的 JWT npm 包,通过本文的介绍,我们可以了解到如何使用它来生成、解密和验证 JWT。在实际应用中,我们可以根据需要设置不同的选项,比如过期时间和算法类型等,从而实现更加安全和灵活的身份验证和信息传递。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60056bd781e8991b448e579f