什么是jwt
jwt是一个自包含的验签方式,用于跨域连接的验证,加密方法可以使用 HMAC 加密或者是 非对称加密,比如 RSA/ ECDSA。
尽管jwt是一个加密信息,但是它只能做一个校验的工具,不能保证安全性,对于安全性的保证更多还是靠https实现
jwt的应用场景
-
授权
这也是jwt最常用的场景。如果用户登录之后,他的每一次请求都会携带jwt,用于他访问路由、路由或者资源的权限校验。由于是请求方携带校验信息,因此jwt可以用于跨域请求。
-
交换信息
如果jwt使用了非对称加密,那么用于两个组织之间交换信息也是非常实用的,一方使用公钥加密,另一方使用私钥解密,可以保证信息不被篡改。
jwt的结构
header(头部)、 payload(载荷)、 signature(签名)
-
header
{
"alg":"HS256" // 约定加密方式
"typ":"JWT" // 固定字段 表明它是jwt
//这段json格式的信息会用BASE64URL编码转换成字符串放在第一段
}
{
"iss":"xiaoliang" // 代表这个jwt的签发主体
"sub":"you are so handsome" // 代表这个jwt的所有人
"aud":"xiaoli" // 代表这个jwt的接收对象
"exp":"12333" // 代表jwt的有效期
"giao 123123 yahoo": "ni gei wo li giaogiao" // 自定义的一些信息
//这段json格式的信息会用BASE64URL编码转换成字符串放在第二段
}
-
- 使用密钥将前面两段字符串用第一段定义的加密方法进行加密
- 把加密结果同样使用BASE54URL编码处理
- 结果拼接在最后,这样如果有人篡改数据
- 在验签的时候,服务端会再次使用指定的加密算法对前两段进行加密,如果加密结果和第三段字符串不一致,就可以认为数据被篡改。