Skip to content

Commit d1713df

Browse files
committed
Ensure OAuth2 resource server works in webflux app
1 parent 59909d2 commit d1713df

File tree

3 files changed

+10
-9
lines changed

3 files changed

+10
-9
lines changed

samples/grpc-webflux-secure/src/test/java/org/springframework/grpc/sample/GrpcServerApplicationTests.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import org.springframework.beans.factory.ObjectProvider;
88
import org.springframework.beans.factory.annotation.Autowired;
99
import org.springframework.beans.factory.annotation.Qualifier;
10-
import org.springframework.boot.builder.SpringApplicationBuilder;
10+
import org.springframework.boot.SpringApplication;
1111
import org.springframework.boot.test.context.SpringBootTest;
1212
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
1313
import org.springframework.boot.test.context.TestConfiguration;
@@ -30,7 +30,6 @@
3030

3131
import io.grpc.Status.Code;
3232
import io.grpc.StatusRuntimeException;
33-
import io.grpc.reflection.v1.ServerReflectionGrpc;
3433

3534
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT,
3635
properties = { "spring.grpc.client.default-channel.address=0.0.0.0:${local.grpc.port}",
@@ -39,7 +38,7 @@
3938
public class GrpcServerApplicationTests {
4039

4140
public static void main(String[] args) {
42-
new SpringApplicationBuilder(GrpcServerApplication.class).run(args);
41+
SpringApplication.from(GrpcServerApplication::main).with(ExtraConfiguration.class).run(args);
4342
}
4443

4544
@Autowired
@@ -70,8 +69,7 @@ void authenticated() {
7069

7170
@TestConfiguration(proxyBeanMethods = false)
7271
@EnableDynamicProperty
73-
@ImportGrpcClients(target = "stub",
74-
types = { SimpleGrpc.SimpleBlockingStub.class, ServerReflectionGrpc.ServerReflectionStub.class })
72+
@ImportGrpcClients(target = "stub", types = { SimpleGrpc.SimpleBlockingStub.class })
7573
@ImportGrpcClients(target = "secure", prefix = "secure", types = { SimpleGrpc.SimpleBlockingStub.class })
7674
static class ExtraConfiguration {
7775

spring-grpc-spring-boot-autoconfigure/src/main/java/org/springframework/grpc/autoconfigure/server/security/OAuth2ClientAutoConfiguration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.List;
2020

2121
import org.springframework.boot.autoconfigure.AutoConfiguration;
22+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2223
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2324
import org.springframework.boot.autoconfigure.security.oauth2.client.ClientsConfiguredCondition;
2425
import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientProperties;
@@ -36,6 +37,7 @@
3637
@AutoConfiguration(
3738
after = org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration.class)
3839
@Configuration(proxyBeanMethods = false)
40+
@ConditionalOnClass(InMemoryClientRegistrationRepository.class)
3941
@Conditional(ClientsConfiguredCondition.class)
4042
@EnableConfigurationProperties(OAuth2ClientProperties.class)
4143
public class OAuth2ClientAutoConfiguration {

spring-grpc-spring-boot-autoconfigure/src/main/java/org/springframework/grpc/autoconfigure/server/security/OAuth2ResourceServerAutoConfiguration.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ static class OpaqueTokenIntrospectionClientConfiguration {
116116

117117
@Bean
118118
@ConditionalOnProperty(name = "spring.security.oauth2.resourceserver.opaquetoken.introspection-uri")
119-
SpringOpaqueTokenIntrospector opaqueTokenIntrospector(OAuth2ResourceServerProperties properties) {
119+
SpringOpaqueTokenIntrospector blockingOpaqueTokenIntrospector(OAuth2ResourceServerProperties properties) {
120120
OAuth2ResourceServerProperties.Opaquetoken opaqueToken = properties.getOpaquetoken();
121121
return new SpringOpaqueTokenIntrospector(opaqueToken.getIntrospectionUri(), opaqueToken.getClientId(),
122122
opaqueToken.getClientSecret());
@@ -161,7 +161,7 @@ static class JwtDecoderConfiguration {
161161

162162
@Bean
163163
@ConditionalOnProperty(name = "spring.security.oauth2.resourceserver.jwt.jwk-set-uri")
164-
JwtDecoder jwtDecoderByJwkKeySetUri(ObjectProvider<JwkSetUriJwtDecoderBuilderCustomizer> customizers) {
164+
JwtDecoder blockingJwtDecoderByJwkKeySetUri(ObjectProvider<JwkSetUriJwtDecoderBuilderCustomizer> customizers) {
165165
JwkSetUriJwtDecoderBuilder builder = NimbusJwtDecoder.withJwkSetUri(this.properties.getJwkSetUri())
166166
.jwsAlgorithms(this::jwsAlgorithms);
167167
customizers.orderedStream().forEach((customizer) -> customizer.customize(builder));
@@ -203,7 +203,7 @@ private boolean nullSafeDisjoint(List<String> c1, List<String> c2) {
203203

204204
@Bean
205205
@Conditional(KeyValueCondition.class)
206-
JwtDecoder jwtDecoderByPublicKeyValue() throws Exception {
206+
JwtDecoder blockingJwtDecoderByPublicKeyValue() throws Exception {
207207
RSAPublicKey publicKey = (RSAPublicKey) KeyFactory.getInstance("RSA")
208208
.generatePublic(new X509EncodedKeySpec(getKeySpec(this.properties.readPublicKey())));
209209
NimbusJwtDecoder jwtDecoder = NimbusJwtDecoder.withPublicKey(publicKey)
@@ -231,7 +231,8 @@ private String exactlyOneAlgorithm() {
231231

232232
@Bean
233233
@Conditional(IssuerUriCondition.class)
234-
SupplierJwtDecoder jwtDecoderByIssuerUri(ObjectProvider<JwkSetUriJwtDecoderBuilderCustomizer> customizers) {
234+
SupplierJwtDecoder blockingJwtDecoderByIssuerUri(
235+
ObjectProvider<JwkSetUriJwtDecoderBuilderCustomizer> customizers) {
235236
return new SupplierJwtDecoder(() -> {
236237
String issuerUri = this.properties.getIssuerUri();
237238
JwkSetUriJwtDecoderBuilder builder = NimbusJwtDecoder.withIssuerLocation(issuerUri);

0 commit comments

Comments
 (0)