Skip to content

Commit 3321050

Browse files
authored
Merge pull request #44374 from sberyozkin/optimize_oidc_tenants_grouping
Improve the way OIDC tenants are grouped and their properties are generated
2 parents 76cba8c + 3f10b51 commit 3321050

File tree

13 files changed

+67
-31
lines changed

13 files changed

+67
-31
lines changed

extensions/keycloak-authorization/runtime/src/main/java/io/quarkus/keycloak/pep/runtime/DefaultPolicyEnforcerResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public class DefaultPolicyEnforcerResolver implements PolicyEnforcerResolver {
4949
this.tlsSupport = OidcTlsSupport.empty();
5050
}
5151

52-
var defaultTenantConfig = new OidcTenantConfig(oidcConfig.defaultTenant(), OidcUtils.DEFAULT_TENANT_ID);
52+
var defaultTenantConfig = new OidcTenantConfig(OidcConfig.getDefaultTenant(oidcConfig), OidcUtils.DEFAULT_TENANT_ID);
5353
var defaultTenantTlsSupport = tlsSupport.forConfig(defaultTenantConfig.tls);
5454
this.defaultPolicyEnforcer = createPolicyEnforcer(defaultTenantConfig, config.defaultTenant(),
5555
defaultTenantTlsSupport);

extensions/keycloak-authorization/runtime/src/main/java/io/quarkus/keycloak/pep/runtime/KeycloakPolicyEnforcerUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ private static boolean isNotComplexConfigKey(String key) {
226226

227227
static OidcTenantConfig getOidcTenantConfig(OidcConfig oidcConfig, String tenant) {
228228
if (tenant == null || DEFAULT_TENANT_ID.equals(tenant)) {
229-
return new OidcTenantConfig(oidcConfig.defaultTenant(), DEFAULT_TENANT_ID);
229+
return new OidcTenantConfig(OidcConfig.getDefaultTenant(oidcConfig), DEFAULT_TENANT_ID);
230230
}
231231

232232
var oidcTenantConfig = oidcConfig.namedTenants().get(tenant);

extensions/oidc-common/runtime/src/main/java/io/quarkus/oidc/common/runtime/config/OidcClientCommonConfig.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.Optional;
55

66
import io.quarkus.runtime.annotations.ConfigDocMapKey;
7+
import io.quarkus.runtime.annotations.ConfigDocSection;
78
import io.quarkus.runtime.annotations.ConfigGroup;
89
import io.smallrye.config.WithDefault;
910

@@ -36,10 +37,14 @@ public interface OidcClientCommonConfig extends OidcCommonConfig {
3637
Optional<String> clientName();
3738

3839
/**
39-
* Credentials the OIDC adapter uses to authenticate to the OIDC server.
40+
* Different authentication options for OIDC client to access OIDC token and other secured endpoints.
4041
*/
42+
@ConfigDocSection
4143
Credentials credentials();
4244

45+
/**
46+
* Credentials used by OIDC client to authenticate to OIDC token and other secured endpoints.
47+
*/
4348
interface Credentials {
4449

4550
/**

extensions/oidc-common/runtime/src/main/java/io/quarkus/oidc/common/runtime/config/OidcCommonConfig.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.OptionalInt;
77

88
import io.quarkus.runtime.annotations.ConfigDocDefault;
9+
import io.quarkus.runtime.annotations.ConfigDocSection;
910
import io.quarkus.runtime.annotations.ConfigGroup;
1011
import io.smallrye.config.WithDefault;
1112

@@ -77,13 +78,15 @@ public interface OidcCommonConfig {
7778
boolean followRedirects();
7879

7980
/**
80-
* Options to configure the proxy the OIDC adapter uses to talk with the OIDC server.
81+
* HTTP proxy configuration.
8182
*/
83+
@ConfigDocSection
8284
Proxy proxy();
8385

8486
/**
85-
* TLS configurations
87+
* TLS configuration.
8688
*/
89+
@ConfigDocSection
8790
Tls tls();
8891

8992
interface Tls {

extensions/oidc/deployment/src/main/java/io/quarkus/oidc/deployment/OidcBuildTimeConfig.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.quarkus.oidc.deployment;
22

33
import io.quarkus.oidc.runtime.OidcConfig;
4+
import io.quarkus.runtime.annotations.ConfigDocSection;
45
import io.quarkus.runtime.annotations.ConfigRoot;
56
import io.smallrye.config.ConfigMapping;
67
import io.smallrye.config.WithDefault;
@@ -18,8 +19,9 @@ public interface OidcBuildTimeConfig {
1819
boolean enabled();
1920

2021
/**
21-
* Dev UI configuration.
22+
* OIDC Dev UI configuration which is effective in dev mode only.
2223
*/
24+
@ConfigDocSection
2325
DevUiConfig devui();
2426

2527
/**

extensions/oidc/deployment/src/test/java/io/quarkus/oidc/test/ProtectedResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void logout() {
4545
@Path("access-token-name")
4646
@GET
4747
public String accessTokenName() {
48-
if (!config.defaultTenant().authentication().verifyAccessToken()) {
48+
if (!OidcConfig.getDefaultTenant(config).authentication().verifyAccessToken()) {
4949
throw new IllegalStateException("Access token verification should be enabled");
5050
}
5151
return accessToken.getName();

extensions/oidc/deployment/src/test/java/io/quarkus/oidc/test/ProtectedResourceWithJwtAccessToken.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@ public class ProtectedResourceWithJwtAccessToken {
2626

2727
@GET
2828
public String getName() {
29-
return idToken.getName() + ":" + config.defaultTenant().authentication().verifyAccessToken();
29+
return idToken.getName() + ":" + OidcConfig.getDefaultTenant(config).authentication().verifyAccessToken();
3030
}
3131
}

extensions/oidc/deployment/src/test/java/io/quarkus/oidc/test/ProtectedResourceWithoutJwtAccessToken.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@ public class ProtectedResourceWithoutJwtAccessToken {
2323

2424
@GET
2525
public String getName() {
26-
return idToken.getName() + ":" + config.defaultTenant().authentication().verifyAccessToken();
26+
return idToken.getName() + ":" + OidcConfig.getDefaultTenant(config).authentication().verifyAccessToken();
2727
}
2828
}

extensions/oidc/runtime/src/main/java/io/quarkus/oidc/runtime/BackChannelLogoutHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public BackChannelLogoutHandler(OidcConfig oidcConfig) {
3737
}
3838

3939
public void setup(@Observes Router router) {
40-
addRoute(router, new OidcTenantConfig(oidcConfig.defaultTenant(), OidcUtils.DEFAULT_TENANT_ID));
40+
addRoute(router, new OidcTenantConfig(OidcConfig.getDefaultTenant(oidcConfig), OidcUtils.DEFAULT_TENANT_ID));
4141

4242
for (var nameToOidcTenantConfig : oidcConfig.namedTenants().entrySet()) {
4343
addRoute(router, new OidcTenantConfig(nameToOidcTenantConfig.getValue(), nameToOidcTenantConfig.getKey()));

extensions/oidc/runtime/src/main/java/io/quarkus/oidc/runtime/OidcConfig.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,31 +10,31 @@
1010
import io.quarkus.runtime.annotations.ConfigRoot;
1111
import io.smallrye.config.ConfigMapping;
1212
import io.smallrye.config.WithDefault;
13+
import io.smallrye.config.WithDefaults;
1314
import io.smallrye.config.WithParentName;
15+
import io.smallrye.config.WithUnnamedKey;
1416

1517
@ConfigMapping(prefix = "quarkus.oidc")
1618
@ConfigRoot(phase = ConfigPhase.RUN_TIME)
1719
public interface OidcConfig {
1820

19-
/**
20-
* The default tenant.
21-
*/
22-
@WithParentName
23-
OidcTenantConfig defaultTenant();
21+
String DEFAULT_TENANT_KEY = "<default>";
2422

2523
/**
2624
* Additional named tenants.
2725
*/
28-
@ConfigDocSection
2926
@ConfigDocMapKey("tenant")
3027
@WithParentName
28+
@WithUnnamedKey(DEFAULT_TENANT_KEY)
29+
@WithDefaults
3130
Map<String, OidcTenantConfig> namedTenants();
3231

3332
/**
34-
* Default TokenIntrospection and UserInfo Cache configuration which is used for all the tenants if it is enabled
35-
* with the build-time 'quarkus.oidc.default-token-cache-enabled' property ('true' by default) and also activated,
36-
* see its `max-size` property.
33+
* Default TokenIntrospection and UserInfo Cache configuration.
34+
* It is used for all the tenants if it is enabled with the build-time 'quarkus.oidc.default-token-cache-enabled' property
35+
* ('true' by default) and also activated, see its `max-size` property.
3736
*/
37+
@ConfigDocSection
3838
TokenCache tokenCache();
3939

4040
/**
@@ -66,4 +66,13 @@ interface TokenCache {
6666
*/
6767
Optional<Duration> cleanUpTimerInterval();
6868
}
69+
70+
static io.quarkus.oidc.runtime.OidcTenantConfig getDefaultTenant(OidcConfig config) {
71+
for (var tenant : config.namedTenants().entrySet()) {
72+
if (OidcConfig.DEFAULT_TENANT_KEY.equals(tenant.getKey())) {
73+
return tenant.getValue();
74+
}
75+
}
76+
return null;
77+
}
6978
}

0 commit comments

Comments
 (0)