随笔20. Jws<Claims>

195 阅读2分钟

Jws<Claims> 是 Java Web Token (JWT) 库中的一个类型,用于表示 JWT 的签名 Web 令牌 (JWS) ,其中的 Claims 包含了 JWT 的主体(也就是 JWT 的声明内容)。让我们逐步解析这个类型的各个部分:

1. JWS (JSON Web Signature)

  • JWS 是一种 JWT 格式,它包含 签名 部分,以确保 JWT 在传输过程中没有被篡改。

  • 一个典型的 JWS 包含三部分:

    • Header(头部) :声明令牌的类型和使用的签名算法。
    • Payload(载荷) :实际的声明内容(也就是 JWT 的声明部分)。
    • Signature(签名) :基于前两部分(头部和载荷)以及某个密钥生成的数字签名,用于验证令牌的真实性和完整性。

2. Claims

  • Claims 是 JWT 的主体部分,包含了一些声明或数据,通常包括用户信息和其他元数据。常见的 Claims 包括:

    • sub(subject) :令牌主体,一般是用户的标识符。
    • iat(issued at) :令牌的签发时间。
    • exp(expiration) :令牌的过期时间。
    • iss(issuer) :令牌的签发者。
    • aud(audience) :令牌的接收者。

这些声明可以是标准的 JWT 声明,也可以是应用自定义的额外信息。

3. Jws 的含义

  • Jws<Claims> 是一个泛型类型,它表示了一个 签名的 JWT,并且该 JWT 的 Payload(载荷)Claims(即声明)。
  • 在 Java JWT 库中,Jws<Claims> 是一个包含了 签名声明 的对象,开发者可以通过解析 Jws<Claims> 来获取 JWT 的声明数据,并验证其签名的有效性。

常见用法

在 Java 中,处理 Jws<Claims> 的过程通常包括:

  1. 使用密钥或公钥验证 JWT 签名的有效性。
  2. Jws<Claims> 中获取声明信息,比如用户 ID、令牌过期时间等。
示例代码:
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;

public class JwtExample {

    public void parseJwt(String jwtToken, String secretKey) {
        // 解析JWT
        Jws<Claims> jwsClaims = Jwts.parser()
                                    .setSigningKey(secretKey)
                                    .parseClaimsJws(jwtToken);

        // 获取声明
        Claims claims = jwsClaims.getBody();
        
        // 读取标准声明
        String subject = claims.getSubject();
        Date expiration = claims.getExpiration();
        String issuer = claims.getIssuer();

        // 处理这些声明信息
        System.out.println("Subject: " + subject);
        System.out.println("Expiration: " + expiration);
        System.out.println("Issuer: " + issuer);
    }
}

总结

  • Jws<Claims> 代表一个带有签名的 JWT 对象,其中 Claims 是 JWT 的主体部分,包含了声明数据。
  • 通过 Jws<Claims> 对象可以验证 JWT 的签名,并从中提取声明内容(如用户信息、令牌的过期时间等)。