什么是jwt?
JWT(JSON Web Token)是一种用于在网络应用中进行身份验证和授权的开放标准(RFC 7519)。它是一种轻量级的安全令牌,由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。简而言之就是服务端验证浏览器请求信息时的令牌,而在它之前服务端的验证方法使用的是session。
jwt和session之间的区别
session的实现是通过在服务端生成唯一会话标识符(Session ID)来识别用户并在服务端开辟内存空间存session,浏览器中的session被篡改后就无法匹配服务端缓存的session以此来达到身份验证的效果,缺点也很明显session是存储在服务端的,这样会造成服务端的内存和存储压力
jwt是由三个部分组成header,payload(载荷),signture(签名)如下图所示,其中header头部是jwt配置信息的base64格式的字符串,payload是用户信息的base64字符串,signture是由('header.payload'//字符串+ 秘钥//服务端设置的)编码后再转base64格式的字符串,其中header中的alg表示signture(签名)的编码格式,type表示整个字符串的类型。jwt是存储在浏览器而不是服务端,服务端会把浏览器传给服务的用户信息生成一个新的jwt前面与服务器携带的旧jwt前面进行比较,如果浏览器篡改了用户信息是不会通过验证的,浏览器就算想修改旧的签名如果拿不到服务端的秘钥生成的签名也会和服务端的不同而无法通过验证,这样做的优点当然就是服务端不需要再存储签名信息了只需要通过传入的信息来验证,缺点就是服务端密钥泄露的话会导致签名被修改安全性不如session(问题也不大,一般也不会泄露秘钥),JWT签发后无法撤销或失效,因为是存储在浏览器只能等待其过期或是重新登录