JWT
概念
Json Web token,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。定义了一种简洁的、自包含的方法用于通信双方之间以JSON对象的形式安全的传递信息。因为数字签名的存在,这些信息是可信的,JWT可以使用HMAC算法(对称加密算法)或者是RSA(非对称)的公私密钥对其进行签名。
JWT组成
Header头部:算法 & token类型
Payload负载:数据(非安全的,不能放敏感数据)
Signature签名:验证签名。
签名过程:(以上图为例)
首先对header、payload进行base64编码成Encoded红色粉色部分(这一部分可以直接翻译成原来的样子),然后使用header中指定的签名算法(HS256)进行加密,变成encoded蓝色部分。三个部分通过 . 连接在一起就是JWT。
若是非对称加密算法,则使用私钥进行加密,公钥进行验签。
如何防篡改:
将蓝色部分签名解开,然后查看解开部分的header、payload是否与原来的一致(右边红色、粉色部分),如果相等,则说明该JWT没有被篡改,否则就是被篡改了。
为什么要用JWT
传统token验证:
传统授权方法的问题是,用户每次请求资源服务,资源服务都需要携带令牌访问认证服务去校验令牌的合法性,并根据令牌获取用户的相关信息,性能低下。
JWT认证:
授权中心持有私钥,其他服务器持有公钥
授权中心对私钥进行签名,资源服务器拿到令牌之后,无需到授权中心调用oauthCheck,只需要使用公钥进行解密,验证是否正确,正确则令牌有效
具体实现参考 2021.11.19 孤尽训练营D25 笔记
发证书:JwtHelper.encode