Skip to content

Commit 884beac

Browse files
authored
Merge pull request #1399 from sberyozkin/oidc_client_token_helper
Refactor the way the dynamic OidcClient is used
2 parents 24268a5 + 8dae175 commit 884beac

File tree

2 files changed

+56
-38
lines changed

2 files changed

+56
-38
lines changed

security-openid-connect-client-quickstart/src/main/java/org/acme/security/openid/connect/client/FrontendResource.java

Lines changed: 10 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
package org.acme.security.openid.connect.client;
22

3-
import java.util.Map;
4-
5-
import org.eclipse.microprofile.config.inject.ConfigProperty;
63
import org.eclipse.microprofile.rest.client.inject.RestClient;
74

8-
import io.quarkus.oidc.client.OidcClient;
9-
import io.quarkus.oidc.client.OidcClientConfig;
10-
import io.quarkus.oidc.client.OidcClientConfig.Grant.Type;
11-
import io.quarkus.oidc.client.OidcClients;
125
import io.quarkus.oidc.client.Tokens;
6+
import io.quarkus.oidc.client.runtime.TokensHelper;
137
import io.smallrye.mutiny.Uni;
148
import jakarta.inject.Inject;
159
import jakarta.ws.rs.GET;
@@ -19,11 +13,9 @@
1913
@Path("/frontend")
2014
public class FrontendResource {
2115
@Inject
22-
OidcClients oidcClients;
23-
24-
@ConfigProperty(name = "quarkus.oidc.auth-server-url")
25-
String oidcProviderAddress;
26-
16+
OidcClientCreator oidcClientCreator;
17+
TokensHelper tokenHelper = new TokensHelper();
18+
2719
@Inject
2820
@RestClient
2921
RestClientWithOidcClientFilter restClientWithOidcClientFilter;
@@ -54,54 +46,34 @@ public Uni<String> getAdminNameWithOidcClientToken() {
5446
@Path("user-name-with-oidc-client-token-header-param")
5547
@Produces("text/plain")
5648
public Uni<String> getUserNameWithOidcClientTokenHeaderParam() {
57-
Uni<OidcClient> oidcClient = createOidcClientDynamically();
58-
return oidcClient.onItem()
59-
.transformToUni(client -> client.getTokens().onItem()
60-
.transformToUni(tokens -> restClientWithTokenHeaderParam.getUserName("Bearer " + tokens.getAccessToken())));
49+
return tokenHelper.getTokens(oidcClientCreator.getOidcClient()).onItem()
50+
.transformToUni(tokens -> restClientWithTokenHeaderParam.getUserName("Bearer " + tokens.getAccessToken()));
6151
}
6252

6353
@GET
6454
@Path("admin-name-with-oidc-client-token-header-param")
6555
@Produces("text/plain")
6656
public Uni<String> getAdminNameWithOidcClientTokenHeaderParam() {
67-
Uni<OidcClient> oidcClient = createOidcClientDynamically();
68-
return oidcClient.onItem()
69-
.transformToUni(client -> client.getTokens().onItem()
70-
.transformToUni(tokens -> restClientWithTokenHeaderParam.getAdminName("Bearer " + tokens.getAccessToken())));
57+
return tokenHelper.getTokens(oidcClientCreator.getOidcClient()).onItem()
58+
.transformToUni(tokens -> restClientWithTokenHeaderParam.getAdminName("Bearer " + tokens.getAccessToken()));
7159
}
7260

7361
@GET
7462
@Path("user-name-with-oidc-client-token-header-param-blocking")
7563
@Produces("text/plain")
7664
public String getUserNameWithOidcClientTokenHeaderParamBlocking() {
77-
Uni<OidcClient> oidcClient = createOidcClientDynamically();
78-
OidcClient client = oidcClient.await().indefinitely();
79-
Tokens tokens = client.getTokens().await().indefinitely();
65+
Tokens tokens = tokenHelper.getTokens(oidcClientCreator.getOidcClient()).await().indefinitely();
8066
return restClientWithTokenHeaderParam.getUserName("Bearer " + tokens.getAccessToken()).await().indefinitely();
8167
}
8268

8369
@GET
8470
@Path("admin-name-with-oidc-client-token-header-param-blocking")
8571
@Produces("text/plain")
8672
public String getAdminNameWithOidcClientTokenHeaderParamBlocking() {
87-
Uni<OidcClient> oidcClient = createOidcClientDynamically();
88-
OidcClient client = oidcClient.await().indefinitely();
89-
Tokens tokens = client.getTokens().await().indefinitely();
73+
Tokens tokens = tokenHelper.getTokens(oidcClientCreator.getOidcClient()).await().indefinitely();
9074
return restClientWithTokenHeaderParam.getAdminName("Bearer " + tokens.getAccessToken()).await().indefinitely();
9175
}
9276

93-
private Uni<OidcClient> createOidcClientDynamically() {
94-
OidcClientConfig cfg = new OidcClientConfig();
95-
cfg.setId("myclient");
96-
cfg.setAuthServerUrl(oidcProviderAddress);
97-
cfg.setClientId("backend-service");
98-
cfg.getCredentials().setSecret("secret");
99-
cfg.getGrant().setType(Type.PASSWORD);
100-
cfg.setGrantOptions(Map.of("password",
101-
Map.of("username", "alice", "password", "alice")));
102-
return oidcClients.newClient(cfg);
103-
}
104-
10577
@GET
10678
@Path("user-name-with-propagated-token")
10779
@Produces("text/plain")
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package org.acme.security.openid.connect.client;
2+
3+
import java.util.Map;
4+
5+
import org.eclipse.microprofile.config.inject.ConfigProperty;
6+
7+
import io.quarkus.oidc.client.OidcClient;
8+
import io.quarkus.oidc.client.OidcClientConfig;
9+
import io.quarkus.oidc.client.OidcClientConfig.Grant.Type;
10+
import io.quarkus.oidc.client.OidcClients;
11+
import io.quarkus.runtime.StartupEvent;
12+
import io.smallrye.mutiny.Uni;
13+
import jakarta.enterprise.context.ApplicationScoped;
14+
import jakarta.enterprise.event.Observes;
15+
import jakarta.inject.Inject;
16+
17+
@ApplicationScoped
18+
public class OidcClientCreator {
19+
20+
@Inject
21+
OidcClients oidcClients;
22+
@ConfigProperty(name = "quarkus.oidc.auth-server-url")
23+
String oidcProviderAddress;
24+
25+
private volatile OidcClient oidcClient;
26+
27+
public void startup(@Observes StartupEvent event) {
28+
createOidcClient().subscribe().with(client -> {oidcClient = client;});
29+
}
30+
31+
public OidcClient getOidcClient() {
32+
return oidcClient;
33+
}
34+
35+
private Uni<OidcClient> createOidcClient() {
36+
OidcClientConfig cfg = new OidcClientConfig();
37+
cfg.setId("myclient");
38+
cfg.setAuthServerUrl(oidcProviderAddress);
39+
cfg.setClientId("backend-service");
40+
cfg.getCredentials().setSecret("secret");
41+
cfg.getGrant().setType(Type.PASSWORD);
42+
cfg.setGrantOptions(Map.of("password",
43+
Map.of("username", "alice", "password", "alice")));
44+
return oidcClients.newClient(cfg);
45+
}
46+
}

0 commit comments

Comments
 (0)