JWT相关

发布时间 2023-09-22 20:48:19作者: _Explosion!

概念

JWT 是⼀个开放标准,它定义了⼀种⽤于简洁,⾃包含的⽤于通信双⽅之间以 JSON 对象的形式安全传递信息的⽅法。 可以使⽤ HMAC 算法或者是 RSA 的公钥密钥对进⾏签名。
优点:
  • ⽣产的token可以包含基本信息,⽐如id、⽤户昵称、头像等信息,避免再次查库
  • 存储在客户端,不占⽤服务端的内存资源

缺点:

  • token是经过base64编码,所以可以解码,因此token加密前的对象不应该包含敏感信息,如⽤户权限,密码等
  • 如果没有服务端存储,则不能做登录失效处理,除⾮服务端改秘钥

 

组成

header+payload+signature  头部+负载+签名
头部:主要是描述签名算法
负载:主要描述是加密对象的信息,如⽤户的id等,也可以加些规范⾥⾯的东⻄,如iss签发者,exp 过期时间,sub ⾯向的⽤户
签名:主要是把前⾯两部分进⾏加密,防⽌别⼈拿到token进⾏base解密后篡改token
 
需注意,正因为签名的存在,保证了JWT的不可篡改性,JWT默认不加密,因此一般不存放私密信息。
 

问题与趋势

1、JWT默认不加密,但可以加密。生成原始令牌后,可以使用改令牌再次对其进行加密。

2、当JWT未加密方法是,一些私密数据无法通过JWT传输。

3、JWT不仅可用于认证,还可用于信息交换。善用JWT有助于减少服务器请求数据库的次数。

4、JWT的最大缺点是服务器不保存会话状态,所以在使用期间不可能取消令牌或更改令牌的权限。也就是说,一旦JWT签发,在有效期内将会一直有效。

5、JWT本身包含认证信息,因此一旦信息泄露,任何人都可以获得令牌的所有权限。为了减少盗用,JWT的有效期不宜设置太长。对于某些重要操作,用户在使用时应该每次都进行进行身份验证。

6、为了减少盗用和窃取,JWT不建议使用HTTP协议来传输代码,而是使用加密的HTTPS协议进行传输。

 


参考文章:https://www.jianshu.com/p/d1644e281250