Skip to content

Commit

Permalink
fix: duplicate JwksSignature beans (#1789)
Browse files Browse the repository at this point in the history
* test: reproducer of Issue 1175

See: #1775

* don’t instantiate ReactiveJwksSignature in factory

Close: #1775
  • Loading branch information
sdelamo authored Sep 9, 2024
1 parent 84cc811 commit 7a7c4da
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 16 deletions.
7 changes: 7 additions & 0 deletions security-oauth2/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,11 @@ dependencies {
testImplementation(mnLogging.logback.classic)
testImplementation(libs.system.stubs.core)
testImplementation(mn.micronaut.retry)

testAnnotationProcessor(mn.micronaut.inject.java)
testImplementation(mnTest.micronaut.test.junit5)
testRuntimeOnly(libs.junit.jupiter.engine)
}
tasks.withType<Test> {
useJUnitPlatform()
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,12 @@
*/
package io.micronaut.security.oauth2.client;

import com.nimbusds.jose.jwk.JWKSet;
import io.micronaut.context.BeanProvider;
import io.micronaut.context.annotation.EachBean;
import io.micronaut.context.annotation.Factory;
import io.micronaut.context.annotation.Parameter;
import io.micronaut.core.annotation.Internal;
import io.micronaut.security.token.jwt.nimbus.ReactiveJwksSignature;
import io.micronaut.security.token.jwt.signature.jwks.JwkSetFetcher;
import io.micronaut.security.token.jwt.signature.jwks.JwkValidator;
import io.micronaut.security.token.jwt.signature.jwks.JwksSignatureConfiguration;
import io.micronaut.security.token.jwt.signature.jwks.JwksSignatureConfigurationProperties;

Expand All @@ -36,19 +33,6 @@
@Factory
@Internal
public class JwksUriSignatureFactory {
/**
* @param jwksSignatureConfiguration JWKS Configuration
* @param jwkValidator JWK Validator
* @param jwkSetFetcher Json Web Key Set Fetcher
* @return a {@link ReactiveJwksSignature} for the {@link JwksSignatureConfiguration}
*/
@EachBean(JwksSignatureConfiguration.class)
public ReactiveJwksSignature createJwksUriSignature(@Parameter JwksSignatureConfiguration jwksSignatureConfiguration,
JwkValidator jwkValidator,
JwkSetFetcher<JWKSet> jwkSetFetcher) {
return new ReactiveJwksSignature(jwksSignatureConfiguration, jwkValidator, jwkSetFetcher);
}

/**
* @param openIdProviderMetadata The open id provider metadata
* @return a {@link JwksSignatureConfiguration} pointed to the jwks_uri exposed via OpenID configuration
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.micronaut.security.oauth2;

import com.nimbusds.jwt.SignedJWT;
import io.micronaut.context.annotation.Property;
import io.micronaut.security.token.jwt.signature.ReactiveSignatureConfiguration;
import io.micronaut.test.extensions.junit5.annotation.MicronautTest;
import jakarta.inject.Inject;
import org.junit.jupiter.api.Test;

import java.util.List;

import static org.junit.jupiter.api.Assertions.assertEquals;

@Property(name = "micronaut.security.token.jwt.signatures.jwks.google.url", value = "https://www.googleapis.com/oauth2/v3/certs")
@MicronautTest(startApplication = false)
class BeansOfTypeReactiveSignatureConfigurationTest {
@Inject
List<ReactiveSignatureConfiguration<SignedJWT>> signatures;

@Test
void testThereIsOnlyOneBeanOfTypeReactiveSignatureConfiguration() {
assertEquals(1, signatures.size());
}
}

0 comments on commit 7a7c4da

Please sign in to comment.