📅  最后修改于: 2023-12-03 15:30:25.136000             🧑  作者: Mango
JWT (JSON Web Token) 是一种开放标准(RFC 7519),用于在网络应用中传递信息。JWT被设计为紧凑的,易于在HTTP和HTML环境中传递。JWT的主要作用是在用户和服务器之间传递身份信息并进行认证。
JWT由三个部分组成:
下面是一个JWT的示例,由以上三个部分组成:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwib3JpZ2luIjoidGVzdCJ9.C5D_yabg78cIxF_9MKc9-SdF3L1zVcpZKag4nWiY84o
Header是一个JSON对象,通常包含两个字段:“alg”表示签名的算法,例如:HS256、RS256等;“typ”表示JWT的类型,通常为“JWT”。
示例Header:
{
"alg": "HS256",
"typ": "JWT"
}
Payload是一个JSON对象,可以包含多个声明(claim),每个声明代表一个实体(通常是用户)和其他数据。有三种声明类型:
例如,以下负载包含了用户的名称和个人资料:
{
"username": "admin",
"profile": "test"
}
签名用于验证令牌的完整性。签名由编码后的Header和Payload,以及秘钥进行Hash生成的。
在Node.js中,我们可以使用jsonwebtoken
来编码/解码JWT。以下是解码的步骤:
import jwt from 'jsonwebtoken';
jwt.verify()
方法来验证JWT并解码Payloadconst secret = 'your_secret_key_here';
const jwtToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwib3JpZ2luIjoidGVzdCJ9.C5D_yabg78cIxF_9MKc9-SdF3L1zVcpZKag4nWiY84o';
try {
const decodedToken = jwt.verify(jwtToken, secret);
console.log(decodedToken);
} catch (err) {
console.error(err);
}
decodedToken
包含解码后的Payload输出结果:
{
"username": "admin",
"origin": "test",
"iat": 1640495990
}
如上所示,我们可以很容易地解码JWT并获取负载中的信息。
以上是在Node.js中解码JWT的方法,其他语言和平台可能会有所不同,但基本思路都是相似的。