Skip to content

Commit

Permalink
todo
Browse files Browse the repository at this point in the history
  • Loading branch information
michalvavrik committed May 4, 2024
1 parent 8790966 commit 8a66605
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -218,14 +218,16 @@ private static boolean isTenantIdentityProviderType(InjectionPointInfo ip) {
@Record(ExecutionTime.RUNTIME_INIT)
@BuildStep
public SyntheticBeanBuildItem setup(
BeanRegistrationPhaseBuildItem beanRegistration,
OidcConfig config,
OidcRecorder recorder,
CoreVertxBuildItem vertxBuildItem,
TlsConfig tlsConfig,
// this is required for setup ordering: we need CP set up
ContextPropagationInitializedBuildItem cpInitializedBuildItem) {
return SyntheticBeanBuildItem.configure(TenantConfigBean.class).unremovable().types(TenantConfigBean.class)
.supplier(recorder.setup(config, vertxBuildItem.getVertx(), tlsConfig))
.supplier(
recorder.setup(config, vertxBuildItem.getVertx(), tlsConfig, detectUserInfoRequired(beanRegistration)))
.destroyer(TenantConfigBean.Destroyer.class)
.scope(Singleton.class) // this should have been @ApplicationScoped but fails for some reason
.setRuntimeInit()
Expand All @@ -252,15 +254,8 @@ public void registerTenantResolverInterceptor(Capabilities capabilities, OidcRec
}
}

@BuildStep
void detectUserInfoRequired(BeanRegistrationPhaseBuildItem beanRegistrationPhaseBuildItem,
BuildProducer<RunTimeConfigurationDefaultBuildItem> runtimeConfigDefaultProducer) {
if (isInjected(beanRegistrationPhaseBuildItem, USER_INFO_NAME, null)) {
runtimeConfigDefaultProducer.produce(
new RunTimeConfigurationDefaultBuildItem("quarkus.oidc.authentication.user-info-required", "true"));
runtimeConfigDefaultProducer.produce(
new RunTimeConfigurationDefaultBuildItem("quarkus.oidc.*.authentication.user-info-required", "true"));
}
private static boolean detectUserInfoRequired(BeanRegistrationPhaseBuildItem beanRegistrationPhaseBuildItem) {
return isInjected(beanRegistrationPhaseBuildItem, USER_INFO_NAME, null);
}

@BuildStep
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ public class OidcRecorder {

private static final Map<String, TenantConfigContext> dynamicTenantsConfig = new ConcurrentHashMap<>();
private static final Set<String> tenantsExpectingServerAvailableEvents = ConcurrentHashMap.newKeySet();
private static volatile boolean userInfoInjectionPointDetected = false;

public Supplier<DefaultTokenIntrospectionUserInfoCache> setupTokenCache(OidcConfig config, Supplier<Vertx> vertx) {
return new Supplier<DefaultTokenIntrospectionUserInfoCache>() {
Expand All @@ -78,7 +79,9 @@ public DefaultTokenIntrospectionUserInfoCache get() {
};
}

public Supplier<TenantConfigBean> setup(OidcConfig config, Supplier<Vertx> vertx, TlsConfig tlsConfig) {
public Supplier<TenantConfigBean> setup(OidcConfig config, Supplier<Vertx> vertx, TlsConfig tlsConfig,
boolean userInfoInjectionPointDetected) {
OidcRecorder.userInfoInjectionPointDetected = userInfoInjectionPointDetected;
final Vertx vertxValue = vertx.get();

String defaultTenantId = config.defaultTenant.getTenantId().orElse(DEFAULT_TENANT_ID);
Expand Down Expand Up @@ -236,6 +239,9 @@ private Uni<TenantConfigContext> createTenantContext(Vertx vertx, OidcTenantConf
}

if (!oidcConfig.discoveryEnabled.orElse(true)) {
if (userInfoInjectionPointDetected && oidcConfig.userInfoPath.isPresent()) {
enableUserInfo(oidcConfig);
}
if (!OidcUtils.isServiceApp(oidcConfig)) {
if (!oidcConfig.authorizationPath.isPresent() || !oidcConfig.tokenPath.isPresent()) {
String authorizationPathProperty = getConfigPropertyForTenant(tenantId, "authorization-path");
Expand Down Expand Up @@ -541,6 +547,9 @@ public Uni<OidcProviderClient> apply(OidcConfigurationMetadata metadata, Throwab
"The application supports RP-Initiated Logout but the OpenID Provider does not advertise the end_session_endpoint"));
}
}
if (userInfoInjectionPointDetected && metadata.getUserInfoUri() != null) {
enableUserInfo(oidcConfig);
}
if (oidcConfig.authentication.userInfoRequired.orElse(false) && metadata.getUserInfoUri() == null) {
client.close();
return Uni.createFrom().failure(new ConfigurationException(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@ quarkus.oidc.auth-server-url=http://localhost:8180/auth/realms/quarkus2/
quarkus.oidc.client-id=quarkus-app
quarkus.oidc.credentials.secret=secret
quarkus.oidc.authentication.scopes=profile,email,phone
quarkus.oidc.authentication.user-info-required=false

quarkus.oidc.no-discovery.auth-server-url=http://localhost:8180/auth/realms/quarkus2/
quarkus.oidc.no-discovery.authentication.user-info-required=false
quarkus.oidc.no-discovery.discovery-enabled=false
quarkus.oidc.no-discovery.jwks-path=protocol/openid-connect/certs
quarkus.oidc.no-discovery.client-id=quarkus-app
Expand Down Expand Up @@ -46,7 +44,6 @@ quarkus.oidc.code-flow-encrypted-id-token-pem.token.decryption-key-location=priv
quarkus.oidc.code-flow-encrypted-id-token-pem.token.audience=any

quarkus.oidc.code-flow-form-post.auth-server-url=${keycloak.url}/realms/quarkus-form-post/
quarkus.oidc.code-flow-form-post.authentication.user-info-required=false
quarkus.oidc.code-flow-form-post.client-id=quarkus-web-app
quarkus.oidc.code-flow-form-post.credentials.secret=AyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQLr_T-1qS0gZH75aKtMN3Yj0iPS4hcgUuTwjAzZr1Z9CAow
quarkus.oidc.code-flow-form-post.application-type=web-app
Expand Down Expand Up @@ -170,7 +167,6 @@ quarkus.oidc.bearer-required-algorithm.credentials.secret=secret
quarkus.oidc.bearer-required-algorithm.token.signature-algorithm=PS256

quarkus.oidc.bearer-azure.provider=microsoft
quarkus.oidc.bearer-azure.authentication.user-info-required=false
quarkus.oidc.bearer-azure.application-type=service
quarkus.oidc.bearer-azure.discovery-enabled=false
quarkus.oidc.bearer-azure.jwks-path=${keycloak.url}/azure/jwk
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ public class AnnotationBasedTenantTest {
public static class NoProactiveAuthTestProfile implements QuarkusTestProfile {
public Map<String, String> getConfigOverrides() {
return Map.ofEntries(Map.entry("quarkus.http.auth.proactive", "false"),
Map.entry("quarkus.oidc.hr.authentication.user-info-required", "false"),
Map.entry("quarkus.oidc.hr.auth-server-url", "http://localhost:8180/auth/realms/quarkus2/"),
Map.entry("quarkus.oidc.hr.client-id", "quarkus-app"),
Map.entry("quarkus.oidc.hr.credentials.secret", "secret"),
Expand Down

0 comments on commit 8a66605

Please sign in to comment.