最近因为项目需要,使用的jwt做验权处理,开始接触jwt,记录一点所看文档及代码的心得。
使用过jwt的人都知道生成的token是
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.XbPfbIHMI6arZ3Y922BhjWgQzWXcXNrz0ogtVhfEd2o
这种用三个顿号实心点分割的被编译后的一大段字符串。
其中第一段是header,里面包含参数类型jwt和签名算法,第二段是payload(也称为CLaims),一般存放一些自己的想放的公共数据(敏感数据不要放进去),第三段是sign,根据自己的私钥根据header里面的签名算法进行加密,主要起安全作用
JWT第三部分最后是签名,签名由以下组件组成:
- header
- payload
- 密钥
下面是我们如何得到JWT的第三部分:
var encodedString = base64UrlEncode(header) + "." + base64UrlEncode(payload); HMACSHA256(encodedString, 'secret');
这里的secret是被服务器签名,我们服务器能够验证存在的token并签名新的token。