JSON Web Tokens (JWT) 是在前端和后端之间传输信息时非常常见的一种身份验证方案。在 Node.js 环境下,有许多库可用于生成和验证 JWT。而其中一个非常方便易用的库是 jwt-wrapper。本文将详细介绍 jwt-wrapper 的使用方法以及一些示例代码。
什么是 jwt-wrapper?
jwt-wrapper 是一个可用于生成和验证 JSON Web Tokens 的 Node.js 模块。它使用简单方便,支持自定义加密密钥、算法、过期时间等参数。同时,它也提供了一些方便的方法,帮助我们获取和解析 JWT 中的信息。
如何安装 jwt-wrapper?
安装 jwt-wrapper 很容易。如果你已经在你的项目中安装了 npm,你只需要在命令行中输入下面的命令即可:
npm install -s jwt-wrapper
jwt-wrapper 的基本使用方法
下面是使用 jwt-wrapper 生成 JWT 的基本代码。在这个例子中,我们使用 HS256 加密算法以及一个密钥:
const jwt = require('jwt-wrapper'); const payload = { username: 'jack', isAdmin: true }; const secret = 'my secret key'; const jwtToken = jwt.sign(payload, secret, { algorithm: 'HS256' }); console.log(jwtToken);
我们也可以使用其他的手段自定义 payload,如下:
const payload = {}; payload['sub'] = userId; payload['iat'] = Math.floor(Date.now() / 1000); payload['exp'] = payload['iat'] + 86400;
JWT 的生成方法也十分简单。我们只需要调用 jwt.verify 方法并提供 JWT 和密钥等参数即可。
const verified = jwt.verify(jwtToken, secret, { algorithms: ['HS256'] }); console.log(verified);
输出如下:
{ iat: 1567279887, exp: 1567366287, username: 'jack', isAdmin: true }
以上就是 jwt-wrapper 的基本使用方法。下面我们将进一步介绍如何使用其它自定义参数。
jwt-wrapper 可选参数
jwt-wrapper 在生成 JWT 时还提供了一些可选的参数,它们有不同的作用。
issuer
issuer 参数用于标识谁发起了这个 token。
const jwtToken = jwt.sign(payload, secret, { algorithm: 'HS256', issuer: 'my app' });
expiresIn
expiresIn 参数用于设置过期时间,支持多种时间格式。
const jwtToken = jwt.sign(payload, secret, { algorithm: 'HS256', expiresIn: '3h' });
audience
audience 参数用于标识这个 token 是面向哪个应用或 URL 的。
const jwtToken = jwt.sign(payload, secret, { algorithm: 'HS256', audience: 'my app' });
noTimestamp
noTimestamp 参数用于禁止在 payload 中自动添加 iat 和 exp 字段。
const jwtToken = jwt.sign(payload, secret, { algorithm: 'HS256', noTimestamp: true });
header
header 参数用于自定义 JWT header 中字段值。
const jwtToken = jwt.sign(payload, secret, { algorithm: 'HS256', header: { 'typ': 'JWT' } });
jwt-wrapper 高级方法
除了生成和验证 JWT 之外,jwt-wrapper 还提供了一些不同的辅助方法来更方便地操作 JWT。
getTokenFromHeader
getTokenFromHeader 方法可帮助我们从请求 header 中获取 JWT 的值。
const token = jwt.getTokenFromHeader(req);
getTokenFromQuery
getTokenFromQuery 方法可帮助我们从查询字符串中获取 JWT 的值。
const token = jwt.getTokenFromQuery(req);
decode
decode 方法可帮助我们扫描 JWT 并返回包含 payload 和 header 的对象。
const decoded = jwt.decode(jwtToken, { complete: true }); console.log(decoded);
expired
expired 方法可帮助我们判断 JWT 是否过期。
const isExpired = jwt.expired(jwtToken); console.log(isExpired);
以上就是 jwt-wrapper 的使用方法。使用 jwt-wrapper 可以帮助我们更加方便地生成和验证 JWT,同时也可提高 Web 应用程序的安全性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005588881e8991b448d5cae