JWT是什么?
JSON Web Token(JWT,JSON网络令牌)是一种基于开放标准RFC 7519规范的跨语言、跨平台的身份验证和授权解决方案,可用于在网络应用程序之间安全地传输声明。JWT使用JSON对象作为声明(payload)的传输格式,以及安全地签署令牌(token),以便验证其真实性和完整性。
JWT的组成
JWT主要由3部分组成:header、payload、signature。
1. header
header部分通常由两部分信息组成:token的类型(即JWT)和所使用的签名算法(例如HMAC SHA256或RSA)。
常见的签名算法:
- HMAC SHA256
- RSA
- ECDSA
2. payload
payload部分用于存储实体信息,如 user id、username等,还可以包含其他任何需要传输的数据。与header部分一样,payload也是一个JSON对象。payload中不建议存储敏感数据。
3. signature
signature是基于header和payload 通过特定的加密算法计算出来的值,用来验证JWT的正确性和完整性。
Node中怎么实现JWT鉴权机制
接下来,我们将通过npm包jsonwebtoken来实现在Node.js中使用JWT鉴权机制。
首先需要安装jsonwebtoken,可以通过npm命令进行安装:
npm install jsonwebtoken --save
然后,我们通过下面的代码实现JWT的生成和校验:
1. 生成JWT
const jwt = require('jsonwebtoken');
const secret = 'mykey';
let user = {
username: 'test'
};
// 生成token
let token = jwt.sign(user, secret, {
expiresIn: 3600 // 过期时间,单位为秒
});
console.log(token);
2. 校验JWT
const jwt = require('jsonwebtoken');
const secret = 'mykey';
let token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InRlc3QiLCJpYXQiOjE1MTYyMzkwMjJ9.xQyI3vP_KLnyqUP8n_nl4O7519h1J5Y9mJ-PU6zEouo';
// 校验token
jwt.verify(token, secret, (error, decoded) => {
if (error) {
console.log(error.message);
} else {
console.log(decoded);
}
});
以上是一个简单的JWT鉴权机制示例,原理可以参考刚才讲的JWT的组成。
至此,我们成功地介绍了JWT的基础知识和使用方法,它可以用于多种场景,如用户身份验证、通过API向第三方服务授权等。
需要注意的是,JWT并不是银弹,也会存在一些漏洞,比如CSRF攻击、token劫持等,所以在需要安全性较高的场合,需要采取适当的措施加强其安全性。