JWT的使用

本文介绍了JWT(JSONWebToken)的基本概念,包括其组成(头部、载荷和签名)、在Java中的使用方法(依赖引入、生成和解析),以及如何确保安全传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JWT的介绍

JWT(JSON Web Token)是一种用于在网络应用间安全传输信息的开放标准(RFC 7519)。它使用 JSON 对象作为载荷(payload)来传输信息,并使用数字签名或加密方式对该 JSON 对象进行验证和保护。

JWT的组成

以下是Jwt的一个示例

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGFpbXMiOnsidXNlck5hbWUiOiLlrZnlgaXmoIsiLCJ1c2VySWQiOiIxIn0sImV4cCI6MTcwNDQxMDcxM30.scTKqW9Z9WC-50ap31ps6QUzCHnVHx8KXDVxgjacRFc

jwt由三个部分组成,中间用’.'分隔

  1. 头部(Header):头部通常由两部分组成:令牌的类型(即 “JWT”)和所使用的签名算法(例如 HMAC、RSA 或者 ECDSA)。头部通常是一个 JSON 对象,经过 Base64 编码后与其他两部分使用点号连接在一起。
  2. 载荷(Payload):载荷是 JWT 的主要内容,也是存放实际信息的地方。它包含了一组称为声明(claims)的属性,声明可以是预定义的标准声明(例如 “iss” 表示签发者、“exp” 表示过期时间等),也可以是自定义的声明。载荷也是一个 JSON 对象,经过 Base64 编码后与头部和签名使用点号连接在一起。
  3. 签名(Signature):签名用于验证 JWT 的完整性和真实性。签名通常由头部、载荷和一个密钥组成,使用指定的签名算法进行计算。签名可以防止 JWT 被篡改或伪造。

JAVA代码的使用

1.带入jwt的依赖

    <!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
    <dependency>
        <groupId>com.auth0</groupId>
        <artifactId>java-jwt</artifactId>
        <version>4.4.0</version>
    </dependency>

2.使用代码生成jwt与解析jwt

生成JWT

 Map<String, String> data = new HashMap<>();
 data.put("userId", "1");
 data.put("userName", "张三");
 String jwtToken = JWT.create()
         .withClaim("claims", data)
         .withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12))
         .sign(Algorithm.HMAC256(JWT_SIGN));

 System.out.println(jwtToken);

其中生成jwt主要包含三个信息,信息体,过期时间与签名
注 : 信息体不能存放敏感信息,这是可以被解析的
使用base64可以解析出信息体,所以不存放敏感信息

String[] jwtParts = jwtToken.split("\\.");
String decodedPayload = new String(Base64.decode(jwtParts[1]));

解析JWT

/**
 * 验证失败的情况
  * jwtToken无效       verify失败        SignatureVerificationException
  * jwtToken过期       verify失败        TokenExpiredException
  * sign签名错误        verify失败        SignatureVerificationException
  */
 Map<String, Object> dataMap = JWT.require(Algorithm.HMAC256(JWT_SIGN))
         .build()
         .verify(jwtToken)
         .getClaim("claims")
         .asMap();

 dataMap.forEach((key, value) -> {
     System.out.println(key + "\t\t" + value);
 });
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值