JWT令牌

JWT令牌

概念:JSON Web Token

​ json:三部分组成,头部、载荷与签名

​ 1 Header:{“typ”:“JWT”,“alg”:“HS256”} =》base64

​ 2 playload:{“sub”:“1234567890”,“name”:“John Doe”,“admin”:true} =》base64

​ 3 signature:将前两部分用”.“链接后使用算法加密。

​ 签证需要base64加密后的header和base64加密后的payload使用.连接组成的字符

串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第

三部分。

HMACSHA256(
  base64UrlEncode(header) + "." +base64UrlEncode(payload),secret)

​ 例子:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6I
kpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7Hg
Q

JJWT签发与验证token

创建token

(1)新建项目jwtTest中的pom.xml中添加依赖

​ maven项目

<dependency> 
    <groupId>io.jsonwebtoken</groupId> 
    <artifactId>jjwt</artifactId> 
    <version>0.9.0</version> 
</dependency>
public static void main(String[] args) {    
//获取系统的当前时间
    long currentTimeMillis = System.currentTimeMillis();
    Date date = new Date(currentTimeMillis);

    //生成jwt令牌
    JwtBuilder jwtBuilder = Jwts.builder()
            .setId("666")//设置jwt编码
            .setSubject("程序员")//设置jwt主题
            .setIssuedAt(new Date())//设置jwt签发日期
            //.setExpiration(date)//设置jwt的过期时间
            .signWith(SignatureAlgorithm.HS256, "xxxxxxx");//设置签名 使用HS256算法, 并设置SecretKey(字符串)

    //生成jwt
    String jwtToken = jwtBuilder.compact();
    System.out.println(jwtToken);
}

验证base64 https://tool.oschina.net/encrypt?type=3

解析token

Claims claims = Jwts.parser().setSigningKey("xxxxxxx").parseClaimsJws(jwtToken).getBody();
System.out.println(claims);

注意:设置签名key必须和生成时一致。

设置过期时间

生成令牌不能永久有效。要不然非常危险。黑客拿到令牌会攻击服务器集群

//获取系统的当前时间
long currentTimeMillis = System.currentTimeMillis();
Date date = new Date(currentTimeMillis);

.setExpiration(date)//设置jwt的过期时间

结果,解析令牌时,会报错,因为令牌过期。

尝试增加过期时间,则不会报错。

Date date = new Date(currentTimeMillis+100000);

生成令牌时,可以增加中间负载中增加自定义内容。

.claim("roles","admin").claim("company","gongsimin")

jwt令牌第二部分变长。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值