这里左边显示的就是一个带签名的 jwt .. 它里面包含了三个部分 ..header ,头部,payload,具体的数据,最后还有一个签名 .. 整体看起来就是一大串字符 ...
注意,每个部分的中间都用了一个点分隔开 ... 这三个部分对应的内容是右边这些 .. 最上面这个是 header .. 就是 jwt 的头部, jwt 的头部就是描述一下这个 jwt 本身 ... 比如用的算法,还有类型 ... ,alg 表示 algorithm,就是算法,这个算法指的是 jwt 里的签名用的算法 .. typ 是 type 表示类型 ... 头部数据的格式是 JSON ... 这块数据要用 base64 这种方法去编码一下 ...
编码之后,还得做点特点的设置,比如去掉结尾的等号,把加号换成小横线,把斜线换成下划线 .. 完成以后,就是你在左边这里看到的第一部分内容 ...
数据里的字段,比如 alg,typ 这些东西,在 JWT 里叫 claims ..
下面这块是 Payload .. 这里包含的是 JWT 里的具体的数据 .. 这里有一些注册的 claim,比如这个 sub 表示的是 Subject,还有比如 iss,是 issuer,表示生成 JWT 的是谁,exp 是 expiration ,表示过期时间,jti 是 JWT ID ...
这些注册的 claim ,就是官方规定的一些名字,还有具体表示的意义 ... 你可以参考 jwt 官方文档去看看这些注册的 claim 都有哪些,意思是什么 ..
剩下的东西,我们可以自己随便往这个 payload 里面放 ... 比如 name 可能表示的是用户名 ... admin 表示用户是否是管理员 ...
你可以自己定义 claim 的名字,还有对应的值 ... 这块数据用 base64 编码以后,就是你在左边这里看到的这个 jwt 里的第二块内容 ...
最后一部分是一个签名 .. 签名要用一种 JWT 支持的算法去处理特定的数据 ... 这个要处理的数据包括 jwt 的用 base64 编码之后的 header,还有 payload ...
签名还要有一个密钥,这个密钥相当于是 JWT 的密码 .. 验证 JWT 的时候同样需要这个密钥 .. 有了这个密钥,你能知道 JWT 里的内容是否有人动过手脚 ...
我们验证了用户的身份以后,就给他签发一个 jwt,这个 jwt 里的内容可以用在前端应用上,比如 payload 里面包含的用户名 .. 你可以直接把它显示在前端 .. 不需要再到后端查询了 .. 再比如这个 admin ,表示用户是否是管理员 ... 用户访问后端一些资源的时候,可以直接使用 jwt 里的 admin 的值来确定用户是不是管理员 ..
我们可以相信 jwt 里的内容,因为它是我们自己签发给用户的 ... 用户如果自己解码了 jwt 里的内容,修改了里面的内容,重新生成了 jwt ..这个重新生成的 jwt 不能通过我们的验证 ... 因为用户不知道我们签发 jwt 的时候用的那个密钥 ...