您的位置:

jsonwebtoken npm详解

jsonwebtoken是一个基于nodejs的实现了JSON Web Tokens(JWT)的库,用于生成和验证jwt。

一、什么是JSON Web Tokens

JSON Web Tokens(JWT)是一种在多个系统之间安全地传递信息的标准。JWT是一个开放标准(RFC 7519),其定义了一种紧凑的、自包含的方式,用于在通信双方之间传输信息。信息是使用JSON对象的形式,使用安全方式传输的。JWT通常用于对于身份验证进行授权。

二、安装jsonwebtoken npm

使用npm安装jsonwebtoken:

npm install jsonwebtoken

三、生成token

jsonwebtoken库提供了一个jwt.sign(payload, secretOrPrivateKey, [options, callback])方法,用于生成token。

payload是想要在jwt中传递的数据,secretOrPrivateKey是用于签名的密钥,options中可以设置一些选项,callback是可选参数,用于异步执行回调函数。

示例代码:

const jwt = require('jsonwebtoken');
const payload = { id: 123, name: 'Jane' };
const secretKey = 'my_secret_key';
const token = jwt.sign(payload, secretKey, { expiresIn: '1h' });
console.log(token);

输出结果:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTIzLCJuYW1lIjoiSmFuZSJ9.E9U53Rf8gd5tTiLbhlBBbYdhHLtHoJ6Mgz-5Uy6pv10

四、验证token

jsonwebtoken库提供了jwt.verify(token, secretOrPublicKey, [options, callback])方法,用于验证token的合法性。

token是待验证的token,secretOrPublicKey是用于验证签名的密钥,options中可以设置一些选项,callback是可选参数,用于异步执行回调函数。

示例代码:

const jwt = require('jsonwebtoken');
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTIzLCJuYW1lIjoiSmFuZSJ9.E9U53Rf8gd5tTiLbhlBBbYdhHLtHoJ6Mgz-5Uy6pv10';
const secretKey = 'my_secret_key';
jwt.verify(token, secretKey, function(err, decoded) {
  if (err) {
    console.log(err.message);
  } else {
    console.log(decoded);
  }
});

输出结果:

{ id: 123, name: 'Jane', iat: 1615558517 }

五、其他设置选项

jsonwebtoken库提供了很多设置选项,可以根据需要进行配置,以下是常用的设置选项:

  • expiresIn - token过期时间
  • notBefore - token生效时间
  • audience - token的接受者(audience和issuer一般成对出现)
  • issuer - token的签发者(audience和issuer一般成对出现)
  • jwtid - token的唯一标识

示例代码:

const jwt = require('jsonwebtoken');
const payload = { id: 123, name: 'Jane' };
const secretKey = 'my_secret_key';
const token = jwt.sign(payload, secretKey, { expiresIn: '1h', audience: 'www.example.com', jwtid: '123456' });
console.log(token);

jwt.verify(token, secretKey, { audience: 'www.example.com', jwtid: '123456' }, function(err, decoded) {
  if (err) {
    console.log(err.message);
  } else {
    console.log(decoded);
  }
});

输出结果:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTIzLCJuYW1lIjoiSmFuZSJ9.UXjxzxU3iNOsGqgLDM8vEaLTlfkuAeT7F9egmFpor84
{ id: 123, name: 'Jane', iat: 1615559156 }

六、总结

jsonwebtoken是一个非常好用的jwt实现库,可以帮助我们快速地生成和验证jwt,使用非常方便。本文对jsonwebtoken的基本使用做了详细的阐述,并提供了完整的代码示例,希望对您有所帮助。