1. 什么是JWT
JWT 即Json Web Token,将用户登录状态以及数据用加密的json格式存储在客户端,服务端可以完全依靠这个字符串认定用户身份。简单来说,这是一种用户身份认证的解决方案。
2. JWT的构成
一个JWT实际上就是一个字符串,由三部分组成分别是:
header(头部)
payload(载荷)
signature(签名)
结构如下:header.payload.signature
第一部分:header(头部)
header(头部)的信息指定了其Token类型和所使用的加密算法。
{
"typ": "JWT",
"alg": "HS256"
}
然后将头部进行base64编码(该加密是可以解码的),构成了第一部eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
第二部分:payload(载荷)
payload(载荷)信息存放的是Claims声明信息。载荷其实就是自定义的数据,一般存储用户Id,过期时间等信息。也就是JWT的核心所在,因为这些数据就是使后端知道此token是哪个用户已经登录的凭证。而且这些数据是存在token里面的,由前端携带,所以后端几乎不需要保存任何数据。
{
'id': user.id,
'username': user.username,
‘exp’: time.time() + 300, #过期时间
}
然后将其进行base64编码,得到Jwt的第二部分:eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZvaG4gRGdWV9
第三部分:signature(签名)
signature(签名)需要使用编码后的header和payload以及一个秘钥,使用header中声明的编码方式进行加盐secret组合加密,然后就构成了jwt的第三部分:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZvaG4gRGdWV9
最后将 token = header + '.'+ payload +'.'+ signature,生成token