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的基本使用做了详细的阐述,并提供了完整的代码示例,希望对您有所帮助。