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")); }