JWT 前端笔记
JWT
JTW全称Json Web Token
没有JWT的时候,服务端给客户端发送信息,客户端返回信息,通常存在cookie或localstorage,不过服务器无法信任这个信息
传给服务器的信息可能是被篡改的,也可能是被伪造的
JWT的雏形
原始信息和密钥一样的情况下才能生成相同签名
info.签名返回后,服务器用相同的算法(比如sha256算法)和密钥重新签名,去对比新的签名和旧的签名是否一样,一样则表示信息没有被篡改
没有 JWT 的时候用cookie+session
JWT由3个部分组成,每个部分由.
来进行分割
header就是一个 JSON 格式的字符串(指定算法和类型),进行base64编码之后形成一个header
同时可以被轻松解码
第二部分是payload也就是信息主题,里面包含我们要颁发的身份信息
比如用户的ID,用户的账号,还能指定 JWT 整个的过期时间,同样也不是加密的
将header
和payload
(负荷)用 .
连接后用密钥进行签名,再对签名用base64,就得到了第三个部分signature(这就是签名的部分)
因为这些信息可以保存在客户端了,服务器的压力就小了,过去服务器还要建立session表
JWT的优点
- 紧凑:JWT可以通过URL, POST参数或者在HTTP头内发送,因为数据量小,传输快捷。
- 自包含:JWT包含了所有用户需要的信息,避免了多次数据库查询。自包含的含义是指这个令牌本身包括了所有验证和识别用户身份所需的信息,而不需要额外查询数据库或调用其他服务。
- 跨语言支持:JWT支持的编码和加密技术在各种编程语言中都有广泛支持。
JWT的缺点
- 存储安全:由于JWT本质上是自包含的,一旦泄漏就可能被任意使用,直到过期。
- 默认不加密:JWT的基本实现没有加密数据,任何人都可以读取payload的内容,除非使用对称或非对称加密方法对其进行加密。
问:jwt的token如何避免不被盗用
- 使用HTTPS
- 短的过期时间
- refresh token
- 在浏览器可用使用HttpOnly和Secure属性的Cookie存储 JWT