Skip to content

Commit 112c7c3

Browse files
authored
Merge pull request #41293 from ryandens/ryandens/41265/oidc-keyring-name
Provide keyringName configuration to OIDC CredentialsProvider lookup
2 parents 74a9386 + 114fd29 commit 112c7c3

File tree

7 files changed

+36
-5
lines changed

7 files changed

+36
-5
lines changed

docs/src/main/asciidoc/security-oidc-code-flow-authentication.adoc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ quarkus.oidc.client-id=quarkus-app
133133
134134
# This is a key which will be used to retrieve a secret from the map of credentials returned from CredentialsProvider
135135
quarkus.oidc.credentials.client-secret.provider.key=mysecret-key
136+
# This is the keyring provided to the CredentialsProvider when looking up the secret, set only if required by the CredentialsProvider implementation
137+
quarkus.oidc.credentials.client-secret.provider.keyring-name=oidc
136138
# Set it only if more than one CredentialsProvider can be registered
137139
quarkus.oidc.credentials.client-secret.provider.name=oidc-credentials-provider
138140
----
@@ -165,6 +167,8 @@ quarkus.oidc.client-id=quarkus-app
165167
166168
# This is a key which will be used to retrieve a secret from the map of credentials returned from CredentialsProvider
167169
quarkus.oidc.credentials.jwt.secret-provider.key=mysecret-key
170+
# This is the keyring provided to the CredentialsProvider when looking up the secret, set only if required by the CredentialsProvider implementation
171+
quarkus.oidc.credentials.client-secret.provider.keyring-name=oidc
168172
# Set it only if more than one CredentialsProvider can be registered
169173
quarkus.oidc.credentials.jwt.secret-provider.name=oidc-credentials-provider
170174
----

docs/src/main/asciidoc/security-openid-connect-client-reference.adoc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -725,6 +725,8 @@ quarkus.oidc-client.client-id=quarkus-app
725725
726726
# This key is used to retrieve a secret from the map of credentials returned from CredentialsProvider
727727
quarkus.oidc-client.credentials.client-secret.provider.key=mysecret-key
728+
# This is the keyring provided to the CredentialsProvider when looking up the secret, set only if required by the CredentialsProvider implementation
729+
quarkus.oidc.credentials.client-secret.provider.keyring-name=oidc
728730
# Set it only if more than one CredentialsProvider can be registered
729731
quarkus.oidc-client.credentials.client-secret.provider.name=oidc-credentials-provider
730732
----
@@ -757,6 +759,8 @@ quarkus.oidc-client.client-id=quarkus-app
757759
758760
# This is a key that will be used to retrieve a secret from the map of credentials returned from CredentialsProvider
759761
quarkus.oidc-client.credentials.jwt.secret-provider.key=mysecret-key
762+
# This is the keyring provided to the CredentialsProvider when looking up the secret, set only if required by the CredentialsProvider implementation
763+
quarkus.oidc.credentials.client-secret.provider.keyring-name=oidc
760764
# Set it only if more than one CredentialsProvider can be registered
761765
quarkus.oidc-client.credentials.jwt.secret-provider.name=oidc-credentials-provider
762766
----

extensions/oidc-client/deployment/src/test/resources/application-oidc-client-credentials.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ quarkus.oidc.credentials.secret=secret
55
quarkus.oidc-client.auth-server-url=${quarkus.oidc.auth-server-url}
66
quarkus.oidc-client.client-id=${quarkus.oidc.client-id}
77
quarkus.oidc-client.credentials.client-secret.provider.name=vault-secret-provider
8+
quarkus.oidc-client.credentials.client-secret.provider.keyring-name=oidc
89
quarkus.oidc-client.credentials.client-secret.provider.key=secret-from-vault

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,12 +467,22 @@ public void setAssertion(boolean assertion) {
467467
public static class Provider {
468468

469469
/**
470-
* The CredentialsProvider name, which should only be set if more than one CredentialsProvider is
470+
* The CredentialsProvider bean name, which should only be set if more than one CredentialsProvider is
471471
* registered
472472
*/
473473
@ConfigItem
474474
public Optional<String> name = Optional.empty();
475475

476+
/**
477+
* The CredentialsProvider keyring name.
478+
* The keyring name is only required when the CredentialsProvider being
479+
* used requires the keyring name to look up the secret, which is often the case when a CredentialsProvider is
480+
* shared by multiple extensions to retrieve credentials from a more dynamic source like a vault instance or secret
481+
* manager
482+
*/
483+
@ConfigItem
484+
public Optional<String> keyringName = Optional.empty();
485+
476486
/**
477487
* The CredentialsProvider client secret key
478488
*/
@@ -487,6 +497,14 @@ public void setName(String name) {
487497
this.name = Optional.of(name);
488498
}
489499

500+
public Optional<String> getKeyringName() {
501+
return keyringName;
502+
}
503+
504+
public void setKeyringName(String keyringName) {
505+
this.keyringName = Optional.of(keyringName);
506+
}
507+
490508
public Optional<String> getKey() {
491509
return key;
492510
}

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -319,10 +319,9 @@ private static Supplier<? extends String> fromCredentialsProvider(Provider provi
319319
public String get() {
320320
if (provider.key.isPresent()) {
321321
String providerName = provider.name.orElse(null);
322+
String keyringName = provider.keyringName.orElse(null);
322323
CredentialsProvider credentialsProvider = CredentialsProviderFinder.find(providerName);
323-
if (credentialsProvider != null) {
324-
return credentialsProvider.getCredentials(providerName).get(provider.key.get());
325-
}
324+
return credentialsProvider.getCredentials(keyringName).get(provider.key.get());
326325
}
327326
return null;
328327
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@ public class SecretProvider implements CredentialsProvider {
1414

1515
@Override
1616
public Map<String, String> getCredentials(String credentialsProviderName) {
17-
return Collections.singletonMap("secret-from-vault", "secret");
17+
if ("oidc".equals(credentialsProviderName)) {
18+
return Collections.singletonMap("secret-from-vault", "secret");
19+
} else {
20+
return Map.of();
21+
}
1822
}
1923

2024
}

extensions/oidc/deployment/src/test/resources/application-dev-mode.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ quarkus.oidc.auth-server-url=${keycloak.url}/realms/quarkus
22
quarkus.oidc.tenant-enabled=false
33
quarkus.oidc.client-id=${oidc.client-id}
44
quarkus.oidc.credentials.client-secret.provider.name=vault-secret-provider
5+
quarkus.oidc.credentials.client-secret.provider.keyring-name=oidc
56
# This is a wrong client secret key, will be updated to 'secret-from-vault' in the dev mode test
67
quarkus.oidc.credentials.client-secret.provider.key=secret-from-vault-typo
78
quarkus.oidc.application-type=web-app

0 commit comments

Comments
 (0)