37public final class JwtConfig {
40 private final String expectedIssuer;
41 private final Set<String> expectedAudience;
42 private final Duration clockSkew;
43 private final boolean validateExpiration;
44 private final boolean validateNotBefore;
45 private final boolean requireExpiration;
46 private final boolean requireSubject;
47 private final boolean requireClientIdForAppTokens;
49 private JwtConfig(
final Builder
builder) {
50 keyProvider = Objects.requireNonNull(
builder.keyProvider,
"keyProvider");
51 expectedIssuer =
builder.expectedIssuer;
52 expectedAudience = Set.copyOf(
builder.expectedAudience);
54 validateExpiration =
builder.validateExpiration;
55 validateNotBefore =
builder.validateNotBefore;
56 requireExpiration =
builder.requireExpiration;
57 requireSubject =
builder.requireSubject;
58 requireClientIdForAppTokens =
builder.requireClientIdForAppTokens;
62 return new Builder(keyProvider);
70 return expectedIssuer;
74 return expectedAudience;
82 return validateExpiration;
86 return validateNotBefore;
90 return requireExpiration;
94 return requireSubject;
98 return requireClientIdForAppTokens;
101 public static final class Builder {
105 private Duration
clockSkew = Duration.ZERO;
113 this.keyProvider = Objects.requireNonNull(
keyProvider,
"keyProvider");
124 this.expectedAudience.removeIf(value -> value ==
null || value.isBlank());
129 final Set<String> values =
new LinkedHashSet<>();
132 if (aud !=
null && !aud.isBlank()) {
137 this.expectedAudience = values;
141 public Builder
clockSkew(
final Duration clockSkew) {
142 this.clockSkew = Objects.requireNonNull(clockSkew,
"clockSkew");
143 if (clockSkew.isNegative()) {
144 throw new IllegalArgumentException(
"clockSkew must be >= 0");
150 this.validateExpiration = validateExpiration;
155 this.validateNotBefore = validateNotBefore;
160 this.requireExpiration = requireExpiration;
165 this.requireSubject = requireSubject;
170 this.requireClientIdForAppTokens = requireClientIdForAppTokens;
174 public JwtConfig build() {
175 return new JwtConfig(
this);
178 private static String blankToNull(
final String value) {
179 return value ==
null || value.isBlank() ? null : value;