Class JwksJWTGenerator

java.lang.Object
tech.riemann.nif.auth.jwt.JWTDecoder
tech.riemann.nif.oidc.service.jwt.JwksJWTGenerator

public class JwksJWTGenerator extends tech.riemann.nif.auth.jwt.JWTDecoder
基于JWKS的JWT生成器

构造器由 @RequiredArgsConstructor 基于 final 字段生成: JwksJWTGenerator(Supplier<String> jwksUriSupplier, long clockSkew)

使用示例:

JwksJWTGenerator generator = new JwksJWTGenerator(() -> "https://auth.example.com/.well-known/jwks.json", 60);
generator.init(); // 初始化加载JWKSet

if (generator.verify(token)) {
    String subject = generator.subject(token);
    // 使用subject进行业务逻辑
}
Author:
Kerbores(kerbores@riemann.tech)
  • Nested Class Summary

    Nested classes/interfaces inherited from class tech.riemann.nif.auth.jwt.JWTDecoder

    tech.riemann.nif.auth.jwt.JWTDecoder.JWTDecoderBuilder
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    long
    返回令牌验证时钟容差(秒)
    void
    初始化并定期更新 JWK Set
    boolean
    JWK Set 是否已就绪(可用性状态)
    com.nimbusds.jwt.JWT
    parse(String token)
    解析并验证 JWT token
    subject(String token)
    获取 JWT token 的主题(subject)
    验证并获取 JWT token 的主题(subject)
    boolean
    verify(String token)
    验证 JWT token 的有效性

    Methods inherited from class tech.riemann.nif.auth.jwt.JWTDecoder

    builder, canEqual, equals, getJwk, getKeyId, hashCode, isValidTimeClaims, key, setClockSkewSeconds, setJwk, setKeyId, toString, verifiedPayload, verify

    Methods inherited from class Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • JwksJWTGenerator

      public JwksJWTGenerator()
  • Method Details

    • getClockSkewSeconds

      public long getClockSkewSeconds()
      返回令牌验证时钟容差(秒)

      覆写父类 JWTDecoder.getClockSkewSeconds(),返回子类构造传入的容差值, 使 JwksJWTGenerator#verify 与 OpenIDConnectService#verifyIdToken 使用一致的可配置容差

      Overrides:
      getClockSkewSeconds in class tech.riemann.nif.auth.jwt.JWTDecoder
      Returns:
      时钟容差(秒)
    • init

      @PostConstruct @Scheduled(fixedRate=10L, initialDelay=10L, timeUnit=MINUTES) public void init()
      初始化并定期更新 JWK Set

      此方法在 Bean 初始化时执行一次,然后每 10 分钟执行一次,用于加载和更新 JWK Set

    • isJwksReady

      public boolean isJwksReady()
      JWK Set 是否已就绪(可用性状态)

      获取成功 jwkSet 非 null;获取失败或定时刷新失败时保持原样(可能为 null 或旧值)

      Returns:
      true 表示当前持有可用的 JWK Set
    • verify

      public boolean verify(String token)
      验证 JWT token 的有效性
      Overrides:
      verify in class tech.riemann.nif.auth.jwt.JWTDecoder
      Parameters:
      token - JWT token 字符串
      Returns:
      如果 token 验证通过则返回 true,否则返回 false
    • parse

      public com.nimbusds.jwt.JWT parse(String token) throws ParseException, com.nimbusds.jose.JOSEException
      解析并验证 JWT token
      Parameters:
      token - JWT token 字符串
      Returns:
      解析并验证通过的 JWT 对象
      Throws:
      ParseException - 解析 token 时发生的异常
      com.nimbusds.jose.JOSEException - JWT 相关操作发生的异常
      IllegalArgumentException - 当 JWK 未找到或验证失败时抛出
    • subject

      public String subject(String token)
      获取 JWT token 的主题(subject)
      Overrides:
      subject in class tech.riemann.nif.auth.jwt.JWTDecoder
      Parameters:
      token - JWT token 字符串
      Returns:
      JWT token 中的主题(subject),如果解析失败则返回 null
    • verifiedSubject

      public String verifiedSubject(String token)
      验证并获取 JWT token 的主题(subject)
      Overrides:
      verifiedSubject in class tech.riemann.nif.auth.jwt.JWTDecoder
      Parameters:
      token - JWT token 字符串
      Returns:
      JWT token 中的主题(subject)