详解JWT Token:从入门到实践的完整指南 - 包含详尽实例及代码解析(第三部分:JWT的构成)
最编程
2024-07-28 11:15:18
...
JWT由三部分组成:header(头部)、payload(载荷)、signature(签名)
JWT的格式为:header.payload.signature
加密后的样例展示:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXNzd29yZCI6ImMyMGFkNGQ3NmZlOTc3NTlhYTI3YTBjOTliZmY2NzEwIiwiaWQiOjksImV4cCI6MTYzODM3Mjk5NSwiaWF0IjoxNjM3NzY4MTk1LCJ1c2VybmFtZSI6IjEyIn0.tslCAlrbk2m4YTiHhxW5exFe0JbwWaDSWG0xI8F4Vmg
接下来详细介绍三者的组成:
1.header(头部)
JWT头部一般包含两部分信息:
1)typ(类别)
2)alg(加密算法,常用的是HMAC256、SHA256)
示例:
{
"alg": "HMAC256",
"typ": "JWT"
}
之后将头部的内容进行base64加密(这种加密是能够对称解密的),加密之后就构成了第一部分:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9。
2.payload(载荷)
JWT的载荷部分是存放有效信息的地方,对于安全性比较高的程序,一般建议不要存放敏感信息,一般包含三部分信息:
1)需要添加进去的有效信息
2)token的签发时间和过期时间
3)私有的声明
示例:
{
"username": username,
"password": password,
"id": id,
"iat": iatDate, // 签发时间
"exp": expiresDate // 过期时间
...
}
同样将上述json对象进行base64加密后可以得到第二部分token字符串:eyJwYXNzd29yZCI6ImMyMGFkNGQ3NmZlOTc3NTlhYTI3YTBjOTliZmY2NzEwIiwiaWQiOjksImV4cCI6MTYzODM3Mjk5NSwiaWF0IjoxNjM3NzY4MTk1LCJ1c2VybmFtZSI6IjEyIn0
3.signature(签名)
这一部分一般设置一个公用密钥进行加密,只能在服务端解密。