集成JJWT对用户验证与鉴权

基于Token签名验证机制的一种鉴权机制;
JJWT 签名后的token分为三部分:
1.header:一般做声明

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

声明类型,这里是jwt
声明加密的算法 通常直接使用 HMAC SHA256

2.pyload: 所有自定义参数与一些标准声明信息的载体

iss: jwt签发者
sub: 主题
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 生效时间
iat: 签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
  • 自定义的参数
    3.signature
    这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分。
    将这三部分用.连接成一个完整的字符串,构成了最终的jwt
JWT 简单应用
/**
 * token 用户信息签名
 */
@Test
public void signWith() throws ParseException {
    final String signWith = Jwts.builder()  /* 进行签名 */
            .setId("张三")    /* 可以新增一个唯一Id用于声明不同签名 */
            .setSubject("主题") /* 新增一个主题 */
            .setIssuedAt(new Date())    /* 当前签名时间 */
            .setHeaderParam("header_key","header_value")    /* JWT中头部的信息 就是header */
            .claim("usna","as123")  /* 在 pyLoad 载体中自定义的参数 */
            .claim("pawd","asdzxc123")  /* 在 pyLoad 载体中自定义的参数 */
            .setExpiration(new SimpleDateFormat("yyyy-MM-dd").parse("2019-12-30")) /* 设置签名到期时间 */
            .signWith(SignatureAlgorithm.HS256, PRIVATE_SECRET) /* 指定加密的算法 指定签名的私钥 需要确保私钥不能泄露 */
            .compact(); /* 编译 */
    System.out.println(signWith);
}

@Test
public void parseSecret(){
    String secret="eyJoZWFkZXJfa2V5IjoiaGVhZGVyX3ZhbHVlIiwiYWxnIjoiSFMyNTYifQ.eyJqdGkiOiLlvKDkuIkiLCJpYXQiOjE1NzQzNDY3MzcsInVzbmEiOiJhczEyMyIsInBhd2QiOiJhc2R6eGMxMjMiLCJleHAiOjE1Nzc2MzUyMDB9.u47Nahf8XiY-l0gbG0J-rizKKNmfJ7JycocP8MdfzA8";
    final Jws<Claims> claimsJws = Jwts.parser() /* 获得一个解析对象 */
            .setSigningKey(PRIVATE_SECRET)  /* 设置 secret 私钥 */
            .parseClaimsJws(secret);    /* 进行解析 并获得Claims  pyLoad 自定义数据集*/
    final Claims body = claimsJws.getBody();
    body.forEach((key, value) -> System.out.println(key+"---"+value));
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值