JWT全称是JSON Web Tokens,是在分布式应用环境间传递身份信息而执行的一种基于JSON的开放标准--(RFC 7519)。它与普通的token方案需要在服务端存储(redis)不同,用户的信息本身就存储在jwt里面。
jwt分为三部分:header、payload和signature,三者之间通过"."分隔。Header申明了JWT使用的签名算法,如:'{"alg":"HS256","typ":"JWT","zip":"flat"}';payload则可以包括如:userId、roleId、expires等信息;signature则是对以上两部分的使用非对称秘钥做的签名。通常我们在请求服务时将这个jwt "token"放到http-header头信息中(Authorization:bearer {jwt})。
jwt-token生成:1、定义header、payload属性;2、 base64UrlEncode(header) + '.' + base64UrlEncode(payload),其中如果payload过大,还可以压缩;3、对第二步结果使用header中指定的算法alg做签名,再追加到其后面。
jwt-token验证:1、将token拆分为三部分,分别base64UrlDecode;2、对前两部分做签名并比较是否一致;3、判断payload中的exp是否已经过期。
工具包:
<dependency>