From d20bc173932cf46ee1103bea09ed018a8f1a432c Mon Sep 17 00:00:00 2001 From: Rujun Chen Date: Fri, 3 Dec 2021 16:39:52 +0800 Subject: [PATCH 1/2] Make AAD B2C support global properties. --- .../AADB2CAutoConfiguration.java | 30 ++------ .../b2c/implementation/AADB2CConditions.java | 36 --------- .../AADB2CCredentialProperties.java | 36 +++++++++ .../AADB2COAuth2ClientConfiguration.java | 20 ++--- .../AADB2CProfileProperties.java | 22 ++++++ .../b2c/implementation/AADB2CProperties.java | 77 ++++++------------- .../AADB2CPropertiesConfiguration.java | 41 ++++++++++ ...AADB2CResourceServerAutoConfiguration.java | 13 +--- .../AADB2CTrustedIssuerRepository.java | 2 +- ...ureMessagingListenerAutoConfiguration.java | 2 +- ...itional-spring-configuration-metadata.json | 4 +- ...ADB2CAuthorizationRequestResolverTest.java | 5 +- .../AADB2CAutoConfigurationTest.java | 61 +++++++++++++-- .../b2c/implementation/AADB2CConstants.java | 6 +- ...2CResourceServerAutoConfigurationTest.java | 8 +- .../AADClientRegistrationRepositoryTest.java | 4 +- .../aad/webapp/SerializerUtilsTest.java | 2 +- 17 files changed, 216 insertions(+), 153 deletions(-) create mode 100644 sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CCredentialProperties.java create mode 100644 sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CProfileProperties.java create mode 100644 sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CPropertiesConfiguration.java diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CAutoConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CAutoConfiguration.java index 1feadc186d194..326cfde082d9f 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CAutoConfiguration.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CAutoConfiguration.java @@ -5,41 +5,22 @@ import com.azure.spring.cloud.autoconfigure.aad.b2c.AADB2COidcLoginConfigurer; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.lang.NonNull; import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; /** - * When the configuration matches the {@link AADB2CConditions.CommonCondition.WebAppMode} condition, - * configure the necessary beans for AAD B2C authentication and authorization, + * Configure the necessary beans for AAD B2C authentication and authorization, * and import {@link AADB2COAuth2ClientConfiguration} class for AAD B2C OAuth2 client support. */ @Configuration @ConditionalOnProperty(value = "spring.cloud.azure.active-directory.b2c.enabled", havingValue = "true") -@Conditional({ AADB2CConditions.CommonCondition.class, AADB2CConditions.UserFlowCondition.class }) -@EnableConfigurationProperties(AADB2CProperties.class) -@Import(AADB2COAuth2ClientConfiguration.class) +@Conditional(AADB2CConditions.UserFlowCondition.class) +@Import({AADB2CPropertiesConfiguration.class, AADB2COAuth2ClientConfiguration.class}) public class AADB2CAutoConfiguration { - private final ClientRegistrationRepository repository; - private final AADB2CProperties properties; - - /** - * Creates a new instance of {@link AADB2CAutoConfiguration}. - * - * @param repository the client registration repository - * @param properties the AAD B2C properties - */ - public AADB2CAutoConfiguration(@NonNull ClientRegistrationRepository repository, - @NonNull AADB2CProperties properties) { - this.repository = repository; - this.properties = properties; - } - /** * Declare AADB2CAuthorizationRequestResolver bean. * @@ -47,7 +28,8 @@ public AADB2CAutoConfiguration(@NonNull ClientRegistrationRepository repository, */ @Bean @ConditionalOnMissingBean - public AADB2CAuthorizationRequestResolver b2cOAuth2AuthorizationRequestResolver() { + public AADB2CAuthorizationRequestResolver b2cOAuth2AuthorizationRequestResolver( + ClientRegistrationRepository repository, AADB2CProperties properties) { return new AADB2CAuthorizationRequestResolver(repository, properties); } @@ -58,7 +40,7 @@ public AADB2CAuthorizationRequestResolver b2cOAuth2AuthorizationRequestResolver( */ @Bean @ConditionalOnMissingBean - public AADB2CLogoutSuccessHandler b2cLogoutSuccessHandler() { + public AADB2CLogoutSuccessHandler b2cLogoutSuccessHandler(AADB2CProperties properties) { return new AADB2CLogoutSuccessHandler(properties); } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CConditions.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CConditions.java index db221e36af014..7dfe94d64cffd 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CConditions.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CConditions.java @@ -2,11 +2,8 @@ // Licensed under the MIT License. package com.azure.spring.cloud.autoconfigure.aad.b2c.implementation; -import org.springframework.boot.autoconfigure.condition.AnyNestedCondition; import org.springframework.boot.autoconfigure.condition.ConditionMessage; import org.springframework.boot.autoconfigure.condition.ConditionOutcome; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.condition.SpringBootCondition; import org.springframework.boot.context.properties.bind.Binder; import org.springframework.context.annotation.ConditionContext; @@ -20,39 +17,6 @@ */ public final class AADB2CConditions { - /** - * Web application or web resource server scenario condition. - */ - static final class CommonCondition extends AnyNestedCondition { - CommonCondition() { - super(ConfigurationPhase.REGISTER_BEAN); - } - - /** - * Web application scenario condition. - */ - @ConditionalOnWebApplication - @ConditionalOnProperty( - prefix = AADB2CProperties.PREFIX, - value = { - "client-id", - "client-secret" - } - ) - static class WebAppMode { - - } - - /** - * Web resource server scenario condition. - */ - @ConditionalOnWebApplication - @ConditionalOnProperty(prefix = AADB2CProperties.PREFIX, value = { "tenant-id" }) - static class WebApiMode { - - } - } - /** * OAuth2 client beans condition. */ diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CCredentialProperties.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CCredentialProperties.java new file mode 100644 index 0000000000000..7a3308118a042 --- /dev/null +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CCredentialProperties.java @@ -0,0 +1,36 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.cloud.autoconfigure.aad.b2c.implementation; + +/** + * Properties used for authorize. + */ +public class AADB2CCredentialProperties { + + /** + * Client id to use when performing service principal authentication with Azure. + */ + private String clientId; + + /** + * Client secret to use when performing service principal authentication with Azure. + */ + private String clientSecret; + + public String getClientId() { + return clientId; + } + + public void setClientId(String clientId) { + this.clientId = clientId; + } + + public String getClientSecret() { + return clientSecret; + } + + public void setClientSecret(String clientSecret) { + this.clientSecret = clientSecret; + } +} diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2COAuth2ClientConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2COAuth2ClientConfiguration.java index bb0ba1bf326ef..def02cc689328 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2COAuth2ClientConfiguration.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2COAuth2ClientConfiguration.java @@ -8,10 +8,10 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.lang.NonNull; import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager; import org.springframework.security.oauth2.client.registration.ClientRegistration; @@ -33,8 +33,8 @@ */ @Configuration @ConditionalOnProperty(value = "spring.cloud.azure.active-directory.b2c.enabled", havingValue = "true") -@Conditional({ AADB2CConditions.CommonCondition.class, AADB2CConditions.ClientRegistrationCondition.class }) -@EnableConfigurationProperties(AADB2CProperties.class) +@Conditional(AADB2CConditions.ClientRegistrationCondition.class) +@Import(AADB2CPropertiesConfiguration.class) @ConditionalOnClass({ OAuth2LoginAuthenticationFilter.class }) public class AADB2COAuth2ClientConfiguration { @@ -79,12 +79,12 @@ public ClientRegistrationRepository clientRegistrationRepository() { private ClientRegistration buildUserFlowClientRegistration(Map.Entry client) { return ClientRegistration.withRegistrationId(client.getValue()) // Use flow as registration Id. .clientName(client.getKey()) - .clientId(properties.getClientId()) - .clientSecret(properties.getClientSecret()) + .clientId(properties.getCredential().getClientId()) + .clientSecret(properties.getCredential().getClientSecret()) .clientAuthenticationMethod(ClientAuthenticationMethod.POST) .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) .redirectUri(properties.getReplyUrl()) - .scope(properties.getClientId(), "openid", "offline_access") + .scope(properties.getCredential().getClientId(), "openid", "offline_access") .authorizationUri(AADB2CURL.getAuthorizationUrl(properties.getBaseUri())) .tokenUri(AADB2CURL.getTokenUrl(properties.getBaseUri(), client.getValue())) .jwkSetUri(AADB2CURL.getJwkSetUrl(properties.getBaseUri(), client.getValue())) @@ -108,13 +108,13 @@ private ClientRegistration buildClientRegistration(Map.Entry"aud" claim of an token. + * AAD B2C credential information. + */ + private AADB2CCredentialProperties credential = new AADB2CCredentialProperties(); + + /** + * App ID URI which might be used in the "aud" claim of a token. */ private String appIdUri; @@ -81,17 +83,6 @@ public class AADB2CProperties implements InitializingBean { */ private int jwtSizeLimit = RemoteJWKSet.DEFAULT_HTTP_SIZE_LIMIT; /* bytes */ - /** - * The application ID that registered under b2c tenant. - */ - @NotBlank(message = "client ID should not be blank") - private String clientId; - - /** - * The application secret that registered under b2c tenant. - */ - private String clientSecret; - private String logoutSuccessUrl = DEFAULT_LOGOUT_SUCCESS_URL; private Map authenticateAdditionalParameters; @@ -156,7 +147,7 @@ private void validateCommonProperties() { .map(authClient -> authClient.getAuthorizationGrantType()) .filter(client -> CLIENT_CREDENTIALS == client) .count(); - if (credentialCount > 0 && !StringUtils.hasText(tenantId)) { + if (credentialCount > 0 && !StringUtils.hasText(profile.getTenantId())) { throw new AADB2CConfigurationException("'tenant-id' must be configured " + "when using client credential flow."); } @@ -276,39 +267,21 @@ public void setLoginFlow(String loginFlow) { } /** - * Gets the client ID. - * - * @return the client ID - */ - public String getClientId() { - return clientId; - } - - /** - * Sets the client ID. - * - * @param clientId the client ID - */ - public void setClientId(String clientId) { - this.clientId = clientId; - } - - /** - * Gets the client secret. + * Gets the credential. * - * @return the client secret + * @return the credential. */ - public String getClientSecret() { - return clientSecret; + public AADB2CCredentialProperties getCredential() { + return credential; } /** - * Sets the client secret. + * Sets the credential. * - * @param clientSecret the client secret + * @param credential the credential. */ - public void setClientSecret(String clientSecret) { - this.clientSecret = clientSecret; + public void setCredential(AADB2CCredentialProperties credential) { + this.credential = credential; } /** @@ -478,21 +451,21 @@ public void setJwtSizeLimit(int jwtSizeLimit) { } /** - * Gets the tenant ID. + * Gets the profile. * - * @return the tenant ID + * @return the profile */ - public String getTenantId() { - return tenantId; + public AADB2CProfileProperties getProfile() { + return profile; } /** - * Sets the tenant ID. + * Sets the profile. * - * @param tenantId the tenant ID + * @param profile the profile */ - public void setTenantId(String tenantId) { - this.tenantId = tenantId; + public void setProfile(AADB2CProfileProperties profile) { + this.profile = profile; } /** diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CPropertiesConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CPropertiesConfiguration.java new file mode 100644 index 0000000000000..15c9791a40fb7 --- /dev/null +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CPropertiesConfiguration.java @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.cloud.autoconfigure.aad.b2c.implementation; + +import com.azure.spring.cloud.autoconfigure.properties.AzureGlobalProperties; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; + +@ConditionalOnProperty(value = "spring.cloud.azure.active-directory.b2c.enabled", havingValue = "true") +@EnableConfigurationProperties +public class AADB2CPropertiesConfiguration { + + /** + * Azure Global Properties. + */ + private final AzureGlobalProperties global; + + /** + * Creates a new instance of {@link AADB2CAutoConfiguration}. + * + * @param global Azure Global properties. + */ + public AADB2CPropertiesConfiguration(AzureGlobalProperties global) { + this.global = global; + } + + @Bean + @ConfigurationProperties(prefix = AADB2CProperties.PREFIX) + @ConditionalOnMissingBean + AADB2CProperties aadB2cProperties() { + AADB2CProperties aadB2cProperties = new AADB2CProperties(); + aadB2cProperties.getCredential().setClientId(global.getCredential().getClientId()); + aadB2cProperties.getCredential().setClientSecret(global.getCredential().getClientSecret()); + aadB2cProperties.getProfile().setTenantId(global.getProfile().getTenantId()); + return aadB2cProperties; + } +} diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CResourceServerAutoConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CResourceServerAutoConfiguration.java index 2ba5b690de79d..ea8af8dc4adf0 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CResourceServerAutoConfiguration.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CResourceServerAutoConfiguration.java @@ -14,9 +14,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.lang.NonNull; @@ -33,16 +31,13 @@ import java.util.List; /** - * When the configuration matches the {@link AADB2CConditions.CommonCondition.WebApiMode} condition, configure the - * necessary beans for AAD B2C resource server beans, and import {@link AADB2COAuth2ClientConfiguration} class for AAD + * Configure necessary beans for AAD B2C resource server beans, and import {@link AADB2COAuth2ClientConfiguration} class for AAD * B2C OAuth2 client support. */ @Configuration @ConditionalOnProperty(value = "spring.cloud.azure.active-directory.b2c.enabled", havingValue = "true") -@Conditional(AADB2CConditions.CommonCondition.class) @ConditionalOnClass(BearerTokenAuthenticationToken.class) -@EnableConfigurationProperties(AADB2CProperties.class) -@Import(AADB2COAuth2ClientConfiguration.class) +@Import({AADB2CPropertiesConfiguration.class, AADB2COAuth2ClientConfiguration.class}) public class AADB2CResourceServerAutoConfiguration { private final AADB2CProperties properties; @@ -113,8 +108,8 @@ public JwtDecoder jwtDecoder(JWTProcessor jwtProcessor, if (StringUtils.hasText(properties.getAppIdUri())) { validAudiences.add(properties.getAppIdUri()); } - if (StringUtils.hasText(properties.getClientId())) { - validAudiences.add(properties.getClientId()); + if (StringUtils.hasText(properties.getCredential().getClientId())) { + validAudiences.add(properties.getCredential().getClientId()); } if (!validAudiences.isEmpty()) { validators.add(new AADJwtAudienceValidator(validAudiences)); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CTrustedIssuerRepository.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CTrustedIssuerRepository.java index 67b085408a6e6..5e71e20cace3b 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CTrustedIssuerRepository.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CTrustedIssuerRepository.java @@ -26,7 +26,7 @@ public class AADB2CTrustedIssuerRepository extends AADTrustedIssuerRepository { * @param aadb2CProperties the AAD B2C properties */ public AADB2CTrustedIssuerRepository(AADB2CProperties aadb2CProperties) { - super(aadb2CProperties.getTenantId()); + super(aadb2CProperties.getProfile().getTenantId()); this.aadb2CProperties = aadb2CProperties; this.resolvedBaseUri = resolveBaseUri(aadb2CProperties.getBaseUri()); this.userFlows = aadb2CProperties.getUserFlows(); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/messaging/AzureMessagingListenerAutoConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/messaging/AzureMessagingListenerAutoConfiguration.java index 9683f9a10899b..0a70a34670e10 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/messaging/AzureMessagingListenerAutoConfiguration.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/messaging/AzureMessagingListenerAutoConfiguration.java @@ -3,8 +3,8 @@ package com.azure.spring.cloud.autoconfigure.messaging; -import com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusMessagingAutoConfiguration; import com.azure.spring.cloud.autoconfigure.eventhubs.AzureEventHubsMessagingAutoConfiguration; +import com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusMessagingAutoConfiguration; import com.azure.spring.messaging.annotation.EnableAzureMessaging; import com.azure.spring.messaging.config.AzureListenerAnnotationBeanPostProcessor; import com.azure.spring.messaging.container.DefaultAzureListenerContainerFactory; diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 9e6a0b627f6b0..cdc8e65a874d9 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -111,7 +111,7 @@ "deprecation": { "level": "error", "reason": "Use uniform property format(spring.cloud.azure.*) in all Spring Cloud Azure libraries.", - "replacement": "spring.cloud.azure.active-directory.b2c.client-id" + "replacement": "spring.cloud.azure.active-directory.b2c.credential.client-id" } }, { @@ -121,7 +121,7 @@ "deprecation": { "level": "error", "reason": "Use uniform property format(spring.cloud.azure.*) in all Spring Cloud Azure libraries.", - "replacement": "spring.cloud.azure.active-directory.b2c.client-secret" + "replacement": "spring.cloud.azure.active-directory.b2c.credential.client-secret" } }, { diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CAuthorizationRequestResolverTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CAuthorizationRequestResolverTest.java index 2501e11bd4aea..9aa650e216186 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CAuthorizationRequestResolverTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CAuthorizationRequestResolverTest.java @@ -2,6 +2,7 @@ // Licensed under the MIT License. package com.azure.spring.cloud.autoconfigure.aad.b2c.implementation; +import com.azure.spring.cloud.autoconfigure.context.AzureGlobalPropertiesAutoConfiguration; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; @@ -21,7 +22,9 @@ class AADB2CAuthorizationRequestResolverTest { private WebApplicationContextRunner getContextRunner() { return new WebApplicationContextRunner() .withClassLoader(new FilteredClassLoader(BearerTokenAuthenticationToken.class)) - .withConfiguration(AutoConfigurations.of(AbstractAADB2COAuth2ClientTestConfiguration.WebOAuth2ClientApp.class, + .withConfiguration(AutoConfigurations.of( + AzureGlobalPropertiesAutoConfiguration.class, + AbstractAADB2COAuth2ClientTestConfiguration.WebOAuth2ClientApp.class, AADB2CAutoConfiguration.class)) .withPropertyValues( String.format("%s=%s", AADB2CConstants.TENANT_ID, AADB2CConstants.TEST_TENANT_ID), diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CAutoConfigurationTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CAutoConfigurationTest.java index 9c7ff4eafda8b..668d62aa23585 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CAutoConfigurationTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CAutoConfigurationTest.java @@ -18,6 +18,7 @@ import java.util.Map; import java.util.Set; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; @@ -33,14 +34,18 @@ WebApplicationContextRunner getDefaultContextRunner() { return new WebApplicationContextRunner() .withConfiguration(AutoConfigurations.of(AzureGlobalPropertiesAutoConfiguration.class, WebOAuth2ClientApp.class, AADB2CAutoConfiguration.class)) .withClassLoader(new FilteredClassLoader(BearerTokenAuthenticationToken.class)) - .withPropertyValues(getWebappCommonPropertyValues()); + .withPropertyValues(getWebappCommonPropertyValuesWithOutGlobalConfigurableItems()) + .withPropertyValues(getGlobalConfigurableItems()); } - private String[] getWebappCommonPropertyValues() { - return new String[] { String.format("%s=%s", AADB2CConstants.BASE_URI, AADB2CConstants.TEST_BASE_URI), - String.format("%s=%s", AADB2CConstants.TENANT_ID, AADB2CConstants.TEST_TENANT_ID), + private String[] getGlobalConfigurableItems() { + return new String[] { String.format("%s=%s", AADB2CConstants.TENANT_ID, AADB2CConstants.TEST_TENANT_ID), String.format("%s=%s", AADB2CConstants.CLIENT_ID, AADB2CConstants.TEST_CLIENT_ID), - String.format("%s=%s", AADB2CConstants.CLIENT_SECRET, AADB2CConstants.TEST_CLIENT_SECRET), + String.format("%s=%s", AADB2CConstants.CLIENT_SECRET, AADB2CConstants.TEST_CLIENT_SECRET) }; + } + + private String[] getWebappCommonPropertyValuesWithOutGlobalConfigurableItems() { + return new String[] { String.format("%s=%s", AADB2CConstants.BASE_URI, AADB2CConstants.TEST_BASE_URI), String.format("%s=%s", AADB2CConstants.LOGOUT_SUCCESS_URL, AADB2CConstants.TEST_LOGOUT_SUCCESS_URL), String.format("%s=%s", AADB2CConstants.LOGIN_FLOW, AADB2CConstants.TEST_KEY_SIGN_UP_OR_IN), String.format("%s.%s=%s", AADB2CConstants.USER_FLOWS, @@ -72,8 +77,8 @@ void testPropertiesBean() { final AADB2CProperties properties = c.getBean(AADB2CProperties.class); Assertions.assertNotNull(properties); - Assertions.assertEquals(properties.getClientId(), AADB2CConstants.TEST_CLIENT_ID); - Assertions.assertEquals(properties.getClientSecret(), AADB2CConstants.TEST_CLIENT_SECRET); + Assertions.assertEquals(properties.getCredential().getClientId(), AADB2CConstants.TEST_CLIENT_ID); + Assertions.assertEquals(properties.getCredential().getClientSecret(), AADB2CConstants.TEST_CLIENT_SECRET); Assertions.assertEquals(properties.getUserNameAttributeName(), AADB2CConstants.TEST_ATTRIBUTE_NAME); Map userFlows = properties.getUserFlows(); @@ -91,6 +96,45 @@ void testPropertiesBean() { }); } + @Test + void setDefaultValueFromAzureGlobalPropertiesTest() { + new WebApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(AzureGlobalPropertiesAutoConfiguration.class, WebOAuth2ClientApp.class, AADB2CAutoConfiguration.class)) + .withClassLoader(new FilteredClassLoader(BearerTokenAuthenticationToken.class)) + .withPropertyValues(getWebappCommonPropertyValuesWithOutGlobalConfigurableItems()) + .withPropertyValues( + "spring.cloud.azure.active-directory.b2c.enabled = true", + "spring.cloud.azure.credential.client-id = global-client-id", + "spring.cloud.azure.credential.client-secret = global-client-secret", + "spring.cloud.azure.profile.tenant-id = global-tenant-id", + "spring.cloud.azure.active-directory.b2c.credential.client-id = aad-client-id", + "spring.cloud.azure.active-directory.b2c.credential.client-secret = aad-client-secret", + "spring.cloud.azure.active-directory.b2c.profile.tenant-id = aad-tenant-id" + ) + .run(context -> { + AADB2CProperties properties = context.getBean(AADB2CProperties.class); + assertEquals("aad-client-id", properties.getCredential().getClientId()); + assertEquals("aad-client-secret", properties.getCredential().getClientSecret()); + assertEquals("aad-tenant-id", properties.getProfile().getTenantId()); + }); + new WebApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(AzureGlobalPropertiesAutoConfiguration.class, WebOAuth2ClientApp.class, AADB2CAutoConfiguration.class)) + .withClassLoader(new FilteredClassLoader(BearerTokenAuthenticationToken.class)) + .withPropertyValues(getWebappCommonPropertyValuesWithOutGlobalConfigurableItems()) + .withPropertyValues( + "spring.cloud.azure.active-directory.b2c.enabled = true", + "spring.cloud.azure.credential.client-id = global-client-id", + "spring.cloud.azure.credential.client-secret = global-client-secret", + "spring.cloud.azure.profile.tenant-id = global-tenant-id" + ) + .run(context -> { + AADB2CProperties properties = context.getBean(AADB2CProperties.class); + assertEquals("global-client-id", properties.getCredential().getClientId()); + assertEquals("global-client-secret", properties.getCredential().getClientSecret()); + assertEquals("global-tenant-id", properties.getProfile().getTenantId()); + }); + } + @Test void testAADB2CAuthorizationRequestResolverBean() { getDefaultContextRunner() @@ -143,7 +187,8 @@ void testWebappConditionsIsNotInvokedWhenAADB2CDisabled() { new WebApplicationContextRunner() .withConfiguration(AutoConfigurations.of(WebResourceServerApp.class, AADB2CResourceServerAutoConfiguration.class)) - .withPropertyValues(getWebappCommonPropertyValues()) + .withPropertyValues(getWebappCommonPropertyValuesWithOutGlobalConfigurableItems()) + .withPropertyValues(getGlobalConfigurableItems()) .run(c -> { verify(userFlowCondition, never()).getMatchOutcome(any(), any()); verify(clientRegistrationCondition, never()).getMatchOutcome(any(), any()); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CConstants.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CConstants.java index f654687245e1a..c1227caffd7fd 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CConstants.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CConstants.java @@ -53,11 +53,11 @@ class AADB2CConstants { static final String USER_NAME_ATTRIBUTE_NAME = String.format("%s.%s", PREFIX, "user-name-attribute-name"); - static final String CLIENT_ID = String.format("%s.%s", PREFIX, "client-id"); + static final String CLIENT_ID = String.format("%s.%s", PREFIX, "credential.client-id"); - static final String TENANT_ID = String.format("%s.%s", PREFIX, "tenant-id"); + static final String TENANT_ID = String.format("%s.%s", PREFIX, "profile.tenant-id"); - static final String CLIENT_SECRET = String.format("%s.%s", PREFIX, "client-secret"); + static final String CLIENT_SECRET = String.format("%s.%s", PREFIX, "credential.client-secret"); static final String APP_ID_URI = String.format("%s.%s", PREFIX, "app-id-uri"); static final String LOGOUT_SUCCESS_URL = String.format("%s.%s", PREFIX, "logout-success-url"); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CResourceServerAutoConfigurationTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CResourceServerAutoConfigurationTest.java index 829546846f8a6..2630ccfe9284d 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CResourceServerAutoConfigurationTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CResourceServerAutoConfigurationTest.java @@ -47,7 +47,9 @@ private WebApplicationContextRunner getResourceServerContextRunner() { @Override WebApplicationContextRunner getDefaultContextRunner() { return new WebApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(WebOAuth2ClientApp.class, + .withConfiguration(AutoConfigurations.of( + WebOAuth2ClientApp.class, + AzureGlobalPropertiesAutoConfiguration.class, AADB2CResourceServerAutoConfiguration.class)) .withPropertyValues(getB2CResourceServerProperties()); } @@ -77,8 +79,8 @@ private ContextConsumer b2CResourceServerPropertiesBean() { final AADB2CProperties properties = c.getBean(AADB2CProperties.class); Assertions.assertNotNull(properties); - Assertions.assertEquals(properties.getTenantId(), AADB2CConstants.TEST_TENANT_ID); - Assertions.assertEquals(properties.getClientId(), AADB2CConstants.TEST_CLIENT_ID); + Assertions.assertEquals(properties.getProfile().getTenantId(), AADB2CConstants.TEST_TENANT_ID); + Assertions.assertEquals(properties.getCredential().getClientId(), AADB2CConstants.TEST_CLIENT_ID); Assertions.assertEquals(properties.getAppIdUri(), AADB2CConstants.TEST_APP_ID_URI); }; } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AADClientRegistrationRepositoryTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AADClientRegistrationRepositoryTest.java index 97f1020052624..642ef64d0d59c 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AADClientRegistrationRepositoryTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AADClientRegistrationRepositoryTest.java @@ -20,10 +20,10 @@ import java.util.List; import java.util.Set; -import static com.azure.spring.cloud.autoconfigure.aad.implementation.WebApplicationContextRunnerUtils.oauthClientRunner; -import static com.azure.spring.cloud.autoconfigure.aad.implementation.WebApplicationContextRunnerUtils.webApplicationContextRunner; import static com.azure.spring.cloud.autoconfigure.aad.core.AADAuthorizationGrantType.AUTHORIZATION_CODE; import static com.azure.spring.cloud.autoconfigure.aad.core.AADAuthorizationGrantType.AZURE_DELEGATED; +import static com.azure.spring.cloud.autoconfigure.aad.implementation.WebApplicationContextRunnerUtils.oauthClientRunner; +import static com.azure.spring.cloud.autoconfigure.aad.implementation.WebApplicationContextRunnerUtils.webApplicationContextRunner; import static com.azure.spring.cloud.autoconfigure.aad.implementation.oauth2.AADClientRegistrationRepository.AZURE_CLIENT_REGISTRATION_ID; import static com.azure.spring.cloud.autoconfigure.aad.implementation.oauth2.AADClientRegistrationRepository.resourceServerCount; import static org.assertj.core.api.Assertions.assertThat; diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/webapp/SerializerUtilsTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/webapp/SerializerUtilsTest.java index f65c180cb2522..974979c392fa4 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/webapp/SerializerUtilsTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/webapp/SerializerUtilsTest.java @@ -14,9 +14,9 @@ import java.util.Map; import java.util.logging.Logger; -import static com.azure.spring.cloud.autoconfigure.aad.implementation.oauth2.AADClientRegistrationRepository.AZURE_CLIENT_REGISTRATION_ID; import static com.azure.spring.cloud.autoconfigure.aad.implementation.jackson.SerializerUtils.deserializeOAuth2AuthorizedClientMap; import static com.azure.spring.cloud.autoconfigure.aad.implementation.jackson.SerializerUtils.serializeOAuth2AuthorizedClientMap; +import static com.azure.spring.cloud.autoconfigure.aad.implementation.oauth2.AADClientRegistrationRepository.AZURE_CLIENT_REGISTRATION_ID; import static org.junit.jupiter.api.Assertions.assertEquals; class SerializerUtilsTest { From 21fdf92bb5c266ab907c000abb9474bc129d215b Mon Sep 17 00:00:00 2001 From: Rujun Chen Date: Fri, 3 Dec 2021 17:03:49 +0800 Subject: [PATCH 2/2] Delete annotations like @Nullable, @NonNull, @Validated. --- .../AADB2CAuthorizationRequestResolver.java | 14 ++++++-------- .../implementation/AADB2CLogoutSuccessHandler.java | 3 +-- .../AADB2COAuth2ClientConfiguration.java | 3 +-- .../aad/b2c/implementation/AADB2CProperties.java | 2 -- .../AADB2CResourceServerAutoConfiguration.java | 3 +-- 5 files changed, 9 insertions(+), 16 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CAuthorizationRequestResolver.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CAuthorizationRequestResolver.java index d331764f88872..999cfe3c9aabe 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CAuthorizationRequestResolver.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CAuthorizationRequestResolver.java @@ -2,8 +2,6 @@ // Licensed under the MIT License. package com.azure.spring.cloud.autoconfigure.aad.b2c.implementation; -import org.springframework.lang.NonNull; -import org.springframework.lang.Nullable; import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; import org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizationRequestResolver; import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter; @@ -51,20 +49,20 @@ public class AADB2CAuthorizationRequestResolver implements OAuth2AuthorizationRe * @param repository the client registration repository * @param properties the AAD B2C properties */ - public AADB2CAuthorizationRequestResolver(@NonNull ClientRegistrationRepository repository, - @NonNull AADB2CProperties properties) { + public AADB2CAuthorizationRequestResolver(ClientRegistrationRepository repository, + AADB2CProperties properties) { this.properties = properties; this.passwordResetUserFlow = this.properties.getPasswordReset(); this.defaultResolver = new DefaultOAuth2AuthorizationRequestResolver(repository, REQUEST_BASE_URI); } @Override - public OAuth2AuthorizationRequest resolve(@NonNull HttpServletRequest request) { + public OAuth2AuthorizationRequest resolve(HttpServletRequest request) { return resolve(request, getRegistrationId(request)); } @Override - public OAuth2AuthorizationRequest resolve(@NonNull HttpServletRequest request, String registrationId) { + public OAuth2AuthorizationRequest resolve(HttpServletRequest request, String registrationId) { if (StringUtils.hasText(passwordResetUserFlow) && isForgotPasswordAuthorizationRequest(request)) { final OAuth2AuthorizationRequest authRequest = defaultResolver.resolve(request, passwordResetUserFlow); return getB2CAuthorizationRequest(authRequest, passwordResetUserFlow); @@ -79,7 +77,7 @@ public OAuth2AuthorizationRequest resolve(@NonNull HttpServletRequest request, S return null; } - private OAuth2AuthorizationRequest getB2CAuthorizationRequest(@Nullable OAuth2AuthorizationRequest request, + private OAuth2AuthorizationRequest getB2CAuthorizationRequest(OAuth2AuthorizationRequest request, String userFlow) { Assert.hasText(userFlow, "User flow should contain text."); @@ -111,7 +109,7 @@ private String getRegistrationId(HttpServletRequest request) { // Handle the forgot password of sign-up-or-in page cannot redirect user to password-reset page. // The B2C service will enhance that, and then related code will be removed. - private boolean isForgotPasswordAuthorizationRequest(@NonNull HttpServletRequest request) { + private boolean isForgotPasswordAuthorizationRequest(HttpServletRequest request) { final String error = request.getParameter("error"); final String description = request.getParameter("error_description"); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CLogoutSuccessHandler.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CLogoutSuccessHandler.java index cc1e1c2b03435..eb38f4ce8ce53 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CLogoutSuccessHandler.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CLogoutSuccessHandler.java @@ -2,7 +2,6 @@ // Licensed under the MIT License. package com.azure.spring.cloud.autoconfigure.aad.b2c.implementation; -import org.springframework.lang.NonNull; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler; @@ -23,7 +22,7 @@ public class AADB2CLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler { * * @param properties the AAD B2C properties */ - public AADB2CLogoutSuccessHandler(@NonNull AADB2CProperties properties) { + public AADB2CLogoutSuccessHandler(AADB2CProperties properties) { this.properties = properties; super.setDefaultTargetUrl(getAADB2CEndSessionUrl()); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2COAuth2ClientConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2COAuth2ClientConfiguration.java index def02cc689328..9687e2bd280ae 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2COAuth2ClientConfiguration.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2COAuth2ClientConfiguration.java @@ -12,7 +12,6 @@ import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.lang.NonNull; import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager; import org.springframework.security.oauth2.client.registration.ClientRegistration; import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; @@ -46,7 +45,7 @@ public class AADB2COAuth2ClientConfiguration { * * @param properties the AAD B2C properties */ - public AADB2COAuth2ClientConfiguration(@NonNull AADB2CProperties properties) { + public AADB2COAuth2ClientConfiguration(AADB2CProperties properties) { this.properties = properties; } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CProperties.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CProperties.java index 9e750842fd231..b81c1b2a207dd 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CProperties.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CProperties.java @@ -8,7 +8,6 @@ import org.springframework.boot.context.properties.DeprecatedConfigurationProperty; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import org.springframework.validation.annotation.Validated; import java.util.HashMap; import java.util.Map; @@ -21,7 +20,6 @@ /** * Configuration properties for Azure Active Directory B2C. */ -@Validated public class AADB2CProperties implements InitializingBean { /** diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CResourceServerAutoConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CResourceServerAutoConfiguration.java index ea8af8dc4adf0..fcd6d7c830246 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CResourceServerAutoConfiguration.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/b2c/implementation/AADB2CResourceServerAutoConfiguration.java @@ -17,7 +17,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.lang.NonNull; import org.springframework.security.oauth2.core.DelegatingOAuth2TokenValidator; import org.springframework.security.oauth2.core.OAuth2TokenValidator; import org.springframework.security.oauth2.jwt.Jwt; @@ -47,7 +46,7 @@ public class AADB2CResourceServerAutoConfiguration { * * @param properties the AAD B2C properties */ - public AADB2CResourceServerAutoConfiguration(@NonNull AADB2CProperties properties) { + public AADB2CResourceServerAutoConfiguration(AADB2CProperties properties) { this.properties = properties; }