JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。
构成
一个JWT实际上就是一个字符串,它由三部分组成,头部[包含类型以及签名所用的算法]header、载荷[JWT的标准所定义]payload与签名signature。
base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分
JWT=BASE64(header).BASE64(payload).sign(BASE64(header).BASE64(payload)+secret)
secreKey
secret是保存在服务器端的,jwt的签发生成也是在服务器端的,secret就是用来进行jwt的签发和jwt的验证,所以,它就是你服务端的私钥,在任何场景都不应该流露出去。一旦客户端得知这个secret, 那就意味着客户端是可以自我签发jwt了。
签名的目的
优点
- 使用算法代替持久层校验,不需要在服务端保存会话信息, 易于应用的扩展
- 因为有了payload部分,所以JWT可以在自身存储一些其他业务逻辑所必要的非敏感信息
- 便于传输,jwt的构成非常简单,字节占用很小,所以它是非常便于传输的
安全相关
- 保护好secret私钥,该私钥非常重要
- 不应该在jwt的payload部分存放敏感信息,因为该部分是客户端可解密的部分
- 使用https协议