jwt获取token_谈谈JWT

dfb4abbc86559eba2cb907e66846b900.png

是什么?

JWT(JSON Web Token)

什么用?

为了识别无状态的http协议对应的客户端身份。简单来说:就是服务端用来确定接收到的请求是来自哪个客户端的。

为什么?

32f65293ed1c7cb83b379d8626a0ebe8.png

5d44aeb025db26f7890fd13ab53528b8.png

怎么用?

jwt关注的是底层的加密实现,所以对于他而言,关键方法就两个,分别是计算加密字符串token和校验解密字符串token。底层实现很复杂,感激前辈们的努力,我们直接使用auth0提供的方法即可。

生成token代码如下:

 //过期时间15分钟
    private static final long EXPIRE_TIME = 15*60*1000;
    /**
     * 密钥
     */
    private static final String SECRET = "111";
    public static String getToken(String id,String sec){
        //指定签名加密算法
        Algorithm algorithm = Algorithm.HMAC256(sec);
        Map<String,Object> header = new HashMap<>();
        //填入token头信息
        header.put("typ","JWT");
        header.put("alg","HS256");
       return JWT.create().withClaim("userId",id)
               .withExpiresAt(new Date(System.currentTimeMillis()+EXPIRE_TIME)).withIssuedAt(new Date())
               .withHeader(header).sign(algorithm);
    }
  1. Algorithm 用来指定签名算法,常用的是HMAC256,加密因子可以是固定值,也可以是变量。
  2. withClaim指定签名里面存储的一些基本信息。
  3. withExpiresAt指定过期时间。
  4. withIssuedAt指定签发时间。
  5. withHeader指定token头,里面包含typ和alg,常用信息为JWT和HS256
  6. 最终产生的token为base64url(header)+.+base64url(playload),然后再用head里面指定的算法进行加密,获取对应token信息。

校验token代码如下:

public static boolean verity(String token,String password){
        try {
            Algorithm algorithm = Algorithm.HMAC256(password);
            JWTVerifier jwtVerifier = JWT.require(algorithm).build();
            DecodedJWT jwt = jwtVerifier.verify(token);
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
        //jwt.getClaims();
        return true;
    }
  1. 解密之后获取到的是DecodedJWT类,通过getClaims()方法可以获取token里面存储的信息。
  2. 获取该类需要调用JWTVerifier 的verify方法。
  3. 获取JWTVerifier 类需要通过require().build()获取。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值