Skip to content

Commit

Permalink
Remove blocking code from OIDC
Browse files Browse the repository at this point in the history
The HTTP calls are async now, and the current code runs the subscription
in a blocking manner, not the actual call.
  • Loading branch information
stuartwdouglas committed Jul 15, 2021
1 parent cdd3a38 commit 07f2966
Show file tree
Hide file tree
Showing 5 changed files with 5 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
import io.quarkus.oidc.SecurityEvent;
import io.quarkus.oidc.common.runtime.OidcCommonUtils;
import io.quarkus.oidc.common.runtime.OidcConstants;
import io.quarkus.runtime.BlockingOperationControl;
import io.quarkus.security.AuthenticationCompletionException;
import io.quarkus.security.AuthenticationFailedException;
import io.quarkus.security.AuthenticationRedirectException;
Expand Down Expand Up @@ -546,13 +545,7 @@ public Throwable apply(Throwable tInner) {
}

private Uni<AuthorizationCodeTokens> refreshTokensUni(TenantConfigContext configContext, String refreshToken) {

return configContext.provider.refreshTokens(refreshToken).plug(u -> {
if (!BlockingOperationControl.isBlockingAllowed()) {
return u.runSubscriptionOn(resolver.getBlockingExecutor());
}
return u;
});
return configContext.provider.refreshTokens(refreshToken);
}

private Uni<AuthorizationCodeTokens> getCodeFlowTokensUni(RoutingContext context, TenantConfigContext configContext,
Expand All @@ -563,12 +556,7 @@ private Uni<AuthorizationCodeTokens> getCodeFlowTokensUni(RoutingContext context
String redirectUriParam = buildUri(context, isForceHttps(configContext), redirectPath);
LOG.debugf("Token request redirect_uri parameter: %s", redirectUriParam);

return configContext.provider.getCodeFlowTokens(code, redirectUriParam).plug(u -> {
if (!BlockingOperationControl.isBlockingAllowed()) {
return u.runSubscriptionOn(resolver.getBlockingExecutor());
}
return u;
});
return configContext.provider.getCodeFlowTokens(code, redirectUriParam);
}

private String buildLogoutRedirectUri(TenantConfigContext configContext, String idToken, RoutingContext context) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package io.quarkus.oidc.runtime;

import java.util.concurrent.Executor;

import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Event;
Expand Down Expand Up @@ -179,7 +177,4 @@ boolean isEnableHttpForwardedPrefix() {
return enableHttpForwardedPrefix;
}

public Executor getBlockingExecutor() {
return tenantConfigBean.getBlockingExecutor();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import io.quarkus.oidc.OidcTenantConfig.Roles.Source;
import io.quarkus.oidc.OidcTokenCredential;
import io.quarkus.oidc.common.runtime.OidcConstants;
import io.quarkus.runtime.BlockingOperationControl;
import io.quarkus.security.AuthenticationFailedException;
import io.quarkus.security.credential.TokenCredential;
import io.quarkus.security.identity.AuthenticationRequestContext;
Expand Down Expand Up @@ -283,14 +282,7 @@ private Uni<TokenVerificationResult> refreshJwksAndVerifyTokenUni(TenantConfigCo
}

private Uni<TokenVerificationResult> introspectTokenUni(TenantConfigContext resolvedContext, String token) {
// remote introspection is required, a blocking call

return resolvedContext.provider.introspectToken(token).plug(u -> {
if (!BlockingOperationControl.isBlockingAllowed()) {
return u.runSubscriptionOn(tenantResolver.getBlockingExecutor());
}
return u;
});
return resolvedContext.provider.introspectToken(token);
}

private static Uni<SecurityIdentity> validateTokenWithoutOidcServer(TokenAuthenticationRequest request,
Expand All @@ -309,11 +301,7 @@ private static Uni<SecurityIdentity> validateTokenWithoutOidcServer(TokenAuthent
private Uni<JsonObject> getUserInfoUni(RoutingContext vertxContext, TokenAuthenticationRequest request,
TenantConfigContext resolvedContext) {
if (resolvedContext.oidcConfig.authentication.isUserInfoRequired()) {
if (BlockingOperationControl.isBlockingAllowed()) {
return resolvedContext.provider.getUserInfo(vertxContext, request);
}
return resolvedContext.provider.getUserInfo(vertxContext, request)
.runSubscriptionOn(tenantResolver.getBlockingExecutor());
return resolvedContext.provider.getUserInfo(vertxContext, request);
} else {
return NULL_USER_INFO_UNI;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
import io.quarkus.oidc.OidcTenantConfig.TokenStateManager.Strategy;
import io.quarkus.oidc.common.runtime.OidcCommonConfig;
import io.quarkus.oidc.common.runtime.OidcCommonUtils;
import io.quarkus.runtime.BlockingOperationControl;
import io.quarkus.runtime.ExecutorRecorder;
import io.quarkus.runtime.LaunchMode;
import io.quarkus.runtime.TlsConfig;
Expand Down Expand Up @@ -60,13 +59,7 @@ public TenantConfigBean get() {
new Function<OidcTenantConfig, Uni<TenantConfigContext>>() {
@Override
public Uni<TenantConfigContext> apply(OidcTenantConfig config) {
return createDynamicTenantContext(vertxValue, config, tlsConfig, config.getTenantId().get())
.plug(u -> {
if (!BlockingOperationControl.isBlockingAllowed()) {
return u.runSubscriptionOn(ExecutorRecorder.getCurrent());
}
return u;
});
return createDynamicTenantContext(vertxValue, config, tlsConfig, config.getTenantId().get());
}
},
ExecutorRecorder.getCurrent());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ public class TenantConfigBean {
private final Map<String, TenantConfigContext> dynamicTenantsConfig;
private final TenantConfigContext defaultTenant;
private final Function<OidcTenantConfig, Uni<TenantConfigContext>> tenantConfigContextFactory;
private final Executor blockingExecutor;

public TenantConfigBean(
Map<String, TenantConfigContext> staticTenantsConfig,
Expand All @@ -25,7 +24,6 @@ public TenantConfigBean(
this.dynamicTenantsConfig = dynamicTenantsConfig;
this.defaultTenant = defaultTenant;
this.tenantConfigContextFactory = tenantConfigContextFactory;
this.blockingExecutor = blockingExecutor;
}

public Map<String, TenantConfigContext> getStaticTenantsConfig() {
Expand All @@ -43,8 +41,4 @@ public Function<OidcTenantConfig, Uni<TenantConfigContext>> getTenantConfigConte
public Map<String, TenantConfigContext> getDynamicTenantsConfig() {
return dynamicTenantsConfig;
}

public Executor getBlockingExecutor() {
return blockingExecutor;
}
}

0 comments on commit 07f2966

Please sign in to comment.