JWT token 生成工具_沉在水底的鱼的博客-CSDN博客

1.简介:

    Jwt 是一种生成token,或者解析token 返回对象的工具,现在流行的都是前后端分离项目,用之前的shiro,或者sercurity 去做权限是会遇到无法做前端的权限,所以就采用token 这种方式,服务器返回token  给前端,前端通过token 访问资源,前端通过cookie保存。

2.为什么是jwt?

WT本质上是一个字符串,一个完整的JWT由三部分组成,头部(header), 荷载(Payload), 和签名(Signature),中间用.隔开,如下是一个典型的JWT:eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE1NjE4Njk2MjMsInVzZXIiOiIxMjM0NSIsInN1YiI6InhsIn0.5szo9Rfp_6b3cszas3-g0V719IIWAN97ZIZhx49-CK1mLGJlbYd__idPuT1EEsMSq92FV7vneEo9IrrZw9XH6g

3. 如何生成 JWT

  1. 生成头部header
  2. 生成荷载payload
  3. 生成签名signature
    signature = encode(base64(header) + '.' + base64(payload), secret)
  4. JWT = header.payload.signatrue

_注:_encode是header.alg指定的加密算法;secret为密钥,需要妥善保存。

4. 如何验证一个 JWT 的合法性

在得到一个 JWT 串之后,如何验证它携带的信息是否可靠呢(假设该串为:header.payload.signatyre),我们只需要:

  1. base64 解码 header 得到加密算法 encode;
  2. 计算vercode = encode(header.payload, secret);
  3. 验证 vercode 和 signatyre 是否匹配

5. 应用

JWT可作为Token,用于单点登陆;相比普通的Token,它的优势在于服务器无需使用额外的存储空间来保存Token,因为使用生成JWT时的secret,就可以验证JWT的合法性。
JWT的安全性建立在加密方密钥的安全性之上。若服务端使用JWT作为Token来鉴别用户身份,而密钥泄漏的话,得到密钥的人便可以为任意用户生成合法的Token,进而冒充他们与服务端交互。

6.jwt 生成和解析

<dependency>

 <groupId>io.jsonwebtoken</groupId>
 <artifactId>jjwt</artifactId>
 <version>0.9.1</version>

</dependency>

//生成token
Map<String, Object> map = new HashMap<>(1);
map.put("user", "12345"); //后面可以换成用户实体
String str = Jwts.builder()

        .setClaims(map)
        .setSubject("xl") //用户名
        .setExpiration(new Date(System.currentTimeMillis() + 3600*1000)) //token保留的时间
        .signWith(SignatureAlgorithm.HS512, "123456") //
        .compact();
System.out.println(str);

//解析token
Claims claims = Jwts.parser()

     .setSigningKey("123456")
     .parseClaimsJws("eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE1NjE4Njk2MjMsInVzZXIiOiIxMjM0NSIsInN1YiI6InhsIn0.5szo9Rfp\_6b3cszas3-g0V719IIWAN97ZIZhx49-CK1mLGJlbYd\_\_idPuT1EEsMSq92FV7vneEo9IrrZw9XH6g")
     .getBody();

System.out.println(claims.getSubject());


Original url: Access
Created at: 2020-09-02 17:57:38
Category: default
Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论