jwt简介与简单使用

JSON WEB Token简称jwt,是一种基于JSON的、声明某种主张的令牌(token)。JWT通常由三部分组成: 头信息(header), 载荷(payload)和签名(signature),使用Base64 URL算法将上述JSON对象转换为字符串保存。Base64是一种编码,是可逆的,所以,在JWT中,不应该在负载里面加入任何敏感的数据。

头一般声明算法和令牌类型,如:

{
  "alg": "HS256",
  "typ": "JWT"
}

其中,alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256);typ属性表示令牌的类型,为jwt类型就写成jwt。

载荷部分一般为jwt要发送的数据,有以下几个关键字:

iss:发行人

exp:到期时间

sub:主题

aud:用户

nbf:在此之前不可用
iat:发布时间 jti:JWT ID用于标识该JWT

此外,我们也可以自定义一些关键字。

签名部分是对上面两部分数据使用特定的密码进行加密,在计算出签名后,jwt头,有效载荷和签名哈希的三个部分组合成一个字符串,每个部分用"."分隔,就构成整个jwt对象。

使用案例:

1.引入依赖:

 

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

2.生成JWT

 //生成jwt
    public void  createJwt(){
        long  now=System.currentTimeMillis();
        long exp=now+600*1000;
        JwtBuilder builder = Jwts.builder();
        //唯一id:{"id":"888"}
        builder.setId("258")
                //接收用户名:{"sub":"孙笑川"}
                .setSubject("孙笑川")
                //签发时间:{"iat":"....."}
                .setIssuedAt(new Date())
                //签名 加密算法和盐
                 .signWith(SignatureAlgorithm.HS256,"1024")
        //设置失效时间
                 .setExpiration(new Date(exp));
              //自定义声明  .claim("name","74120");
        //签发token
        String token=builder.compact();
        System.out.println(token);
    }

3.解析jwt

public void DecodeToken(String token){
        Claims body = (Claims) Jwts.parser()
                //设置解析的密码
                .setSigningKey("1024").parse(token).getBody();
        System.out.println(body.getId());
        System.out.println(body.getIssuedAt());
        System.out.println(body.getSubject());
        System.out.println(body.getExpiration());
        System.out.println(body.get("name"));
    }

  

posted @ 2021-02-09 20:01  第十八使徒  阅读(484)  评论(0)    收藏  举报