jwt 全称为 JSON Web Tokens。是一种成熟的 token 字符串生成方案。
token 是包含用户信息的一个字符串,那这种字符串应该是什么格式呢?
比如有以下信息:
{
"user": "jack",
"role": "admin",
"expires": "2025-10-10"
}
- 直接拼接,user=”jack”&role=”admin”&expires=”2025-10-10”。😐
- 使用 base64 进行编码 ‘eyJ1c2VyIjoiamFjayIsInJvbGUiOiJhZG1pbiIsImV4cGlyZXMiOiIyMDI1LTEwLTEwIn0=’。这种方式虽然可以防止用户看到信息,但是不能防篡改。用户如果改了 role 角色再重新 base64 编码,就会有问题。
- 防篡改的方式是给 token 加签名。签名就是指一个生成者指定的一个字符串,和 用户信息 放在一起编码和加密,这样用户拿不到签名就无法生成 token。
jwt 就是第三种方式,并且 jwt 做了相关的规范规定,生成 token 的格式是 header➕payload➕signature。
jwt 的 rfc 标准RFC 7519 - JSON Web Token (JWT) (ietf.org)