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");
123 this.expectedAudience.removeIf(value -> value ==
null || value.isBlank());
128 final Set<String> values =
new LinkedHashSet<>();
131 if (aud !=
null && !aud.isBlank()) {
136 this.expectedAudience = values;
140 public Builder
clockSkew(
final Duration clockSkew) {
141 this.clockSkew = Objects.requireNonNull(clockSkew,
"clockSkew");
142 if (clockSkew.isNegative()) {
143 throw new IllegalArgumentException(
"clockSkew must be >= 0");
149 this.validateExpiration = validateExpiration;
154 this.validateNotBefore = validateNotBefore;
159 this.requireExpiration = requireExpiration;
164 this.requireSubject = requireSubject;
169 this.requireClientIdForAppTokens = requireClientIdForAppTokens;
173 public JwtConfig build() {
174 return new JwtConfig(
this);
177 private static String blankToNull(
final String value) {
178 return value ==
null || value.isBlank() ? null : value;