JSON Web令牌(JWT)是非常轻巧的规范。此规范使我们能够在用户和服务器之间传达安全可靠的信息。
JWT实际上是一个字符串,由三个部分组成,即头部,负载和签名。
头部用于描述有关JWT的最基本信息,例如其类型和签名中使用的算法。此也可以表示为JSON对象。
头部的签名算法是HS256算法。我们执行base64编码,编码字符串如下:
提示:base64是一种基于64个打印字符来表示二进制数据的表示方法。由于2的第6侧等于64个,每6位是一个单位,与印刷字符相对应。三个字节中有24位,对应对于4个base64单元,即需要由4个打印字符表示3个字节。JDK提供了非常方便的base64encoder和base64decoder,可以轻松完成Base64编码和解码。
负载是存储有效信息的地方。该名称就像飞机上携带的特殊商品一样。这些有效信息包含三个部分:
2.2.1在标准中注册的语句(建议但不使用)2.2.2公共声明公共声明可以添加任何信息,通常添加用户的相关信息或其他业务需求的必要信息。但是,不建议添加敏感的信息信息是因为该部分可以在客户端解密。
2.2.3私人声明私人声明是提供者和消费者定义的声明。通常,不建议存储敏感信息,因为基本64对称解密,这意味着可以将信息的这一部分归类为明亮的文本信息。这是指自定义索赔。
定义负载有效载荷:
然后在base64中鳕鱼以获取JWT的第二部分:
JWT的第三部分是签证信息。此签证信息包括三个部分:
注意:以下HMACSHA256()方法是我从Internet找到的一种加密方法。正确性是未知的。您可以理解一般含义。无论如何,JJWT将自动实施盐操作。
执行上述方法并打印签证:
使用这三个部分连接到完整的字符串,形成最终的JWT:
注意:秘密存储在服务器上。JWT的发行也在服务器端。秘密用于发布JWT发行和JWT验证。因此,它是服务器的私钥。它不应在任何场景中揭示。当客户知道这个秘密时,这意味着客户可以发行JWT。