欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

详解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(签名)
这一部分一般设置一个公用密钥进行加密,只能在服务端解密。