JWT加密工具

JWT加密工具

2.JWT介绍

JSON Web Token(JWT),它定义了一种简洁的、自包含的协议格式,JWT可以使用HMAC算法或使用RSA的公钥/私钥对进行签名,防止被篡改。

JWT官网: https://jwt.io

JWT组成

JWT由三个部分组成:JWT头、有效载荷和签名

jwt头

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

在上面的代码中,alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256);type属性表示令牌的类型,JWT令牌统一写为JWT(需要额外设置)。

有效载荷

有效载荷部分,是JWT的主体内容部分,也是一个JSON对象,包含需要传递的数据。

JWT指定七个默认字段供选择(不是必须的):

iss:发行人

exp:到期时间

sub:主题

aud:用户

nbf:在此之前不可用

iat:发布时间

jti:JWT ID用于标识该JWT

除以上默认字段外,还可以自定义私有字段,比如:

{"username": "zhangsan","id": "123"}

请注意,默认情况下JWT是未加密的,任何人都可以解读其内容,因此不要构建隐私信息字段,存放保密信息,以防止信息泄露

签名Signature

签名部分是对上面两部分数据签名,通过指定的算法生成哈希,以确保数据不会被篡改。

首先,需要指定一个密码(secret)。该密码仅仅为保存在服务器中,并且不能向用户公开。

然后,使用标头中指定的签名算法(默认情况下为HMAC SHA256)根据以下公式生成签名

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

最终生成的jwt的字符串由三部分组成:

header(base64后的)

payload(base64后的)

Signature

例如:

eyJ0eXBlIjoiand0IiwiYWxnIjoiSFMyNTYifQ.eyJ1c2VybmFtZSI6InpoYW5nc2FuIn0.C13IdXCyBs4oALrcttCBQ5LMsl0pTNxwgwqsVW7lSPs

官网上可以查看jwt信息

img

2 生成jwt

导入jar

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

jwt工具类

package com.renr.worst.common.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.Map;

/**
 * jwt工具类
 */
public class JwtUtils {
    // 密钥
    private final static String secret = "123456789qwertyui";

    /**
     * 生成jwt
     *
     * @param claims
     * @return
     */
    public static String createJwt(Map<String, Object> claims) {

        // 签名算法,表示sha256
        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;

        //构造jwt
        JwtBuilder builder = Jwts.builder()//.setHeaderParam("type","jwt") // 设置头
                .setClaims(claims) // 设置载荷
                .setExpiration(new Date(System.currentTimeMillis() + 1800000)) // 设置过期时间
                .signWith(signatureAlgorithm, secret); // 使用指定算法设置签名
        //生成jwt
        return builder.compact();
    }

    /**
     * 解析,如果不符合,报异常
     *
     * @param jsonWebToken
     * @return
     */
    public static Claims parseJWT(String jsonWebToken) {
        try {
            Claims claims = Jwts.parser()
                    .setSigningKey(secret)
                    .parseClaimsJws(jsonWebToken).getBody();
            return claims;
        } catch (Exception ex) {
            throw new RuntimeException(ex.getMessage());
        }
    }
}

        return claims;
    } catch (Exception ex) {
        throw new RuntimeException(ex.getMessage());
    }
}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值