Skip to content

Commit 3986906

Browse files
author
Rujun Chen
authored
Enable tests for new aad implementation. (Azure#17823)
1 parent 397cd0d commit 3986906

File tree

6 files changed

+78
-36
lines changed

6 files changed

+78
-36
lines changed

sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/spring/aad/implementation/AuthorizedClientRepoTest.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
1414
import org.springframework.security.oauth2.client.registration.ClientRegistration;
1515
import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository;
16+
import org.springframework.security.oauth2.core.AbstractOAuth2Token;
1617
import org.springframework.security.oauth2.core.OAuth2AccessToken;
1718
import org.springframework.security.oauth2.core.OAuth2RefreshToken;
1819
import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken;
1920

2021
import java.time.Instant;
22+
import java.util.Optional;
2123

2224
import static org.junit.jupiter.api.Assertions.assertEquals;
2325
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -34,7 +36,7 @@ public class AuthorizedClientRepoTest {
3436
private MockHttpServletRequest request;
3537
private MockHttpServletResponse response;
3638

37-
//@BeforeEach
39+
@BeforeEach
3840
public void setup() {
3941
runner = createApp();
4042
runner.start();
@@ -50,20 +52,20 @@ public void setup() {
5052

5153
private AppRunner createApp() {
5254
AppRunner result = new AppRunner(AzureActiveDirectoryConfigurationTest.DumbApp.class);
53-
result.property("azure.activedirectory.uri", "fake-uri");
55+
result.property("azure.activedirectory.authorization-server-uri", "fake-uri");
5456
result.property("azure.activedirectory.tenant-id", "fake-tenant-id");
5557
result.property("azure.activedirectory.client-id", "fake-client-id");
5658
result.property("azure.activedirectory.client-secret", "fake-client-secret");
5759
result.property("azure.activedirectory.authorization.graph.scopes", "Calendars.Read");
5860
return result;
5961
}
6062

61-
//@AfterEach
63+
@AfterEach
6264
public void tearDown() {
6365
runner.stop();
6466
}
6567

66-
//@Test
68+
@Test
6769
public void loadInitAzureAuthzClient() {
6870
repo.saveAuthorizedClient(
6971
createAuthorizedClient(azure),
@@ -84,7 +86,7 @@ public void loadInitAzureAuthzClient() {
8486
assertEquals("fake-refresh-token", client.getRefreshToken().getTokenValue());
8587
}
8688

87-
//@Test
89+
@Test
8890
public void saveAndLoadAzureAuthzClient() {
8991
repo.saveAuthorizedClient(
9092
createAuthorizedClient(graph),
@@ -131,11 +133,15 @@ private Authentication createAuthentication() {
131133
}
132134

133135
private boolean isTokenExpired(OAuth2AccessToken token) {
134-
return token.getExpiresAt().isBefore(Instant.now());
136+
return Optional.ofNullable(token)
137+
.map(AbstractOAuth2Token::getExpiresAt)
138+
.map(expiresAt -> expiresAt.isBefore(Instant.now()))
139+
.orElse(false);
135140
}
136141

137-
//@Configuration
138-
//@SpringBootApplication
139-
//@EnableWebSecurity
140-
public static class DumbApp {}
142+
@Configuration
143+
@SpringBootApplication
144+
@EnableWebSecurity
145+
public static class DumbApp {
146+
}
141147
}

sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/spring/aad/implementation/AuthzCodeGrantRequestEntityConverterTest.java

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
package com.azure.spring.aad.implementation;
22

33
import com.azure.test.utils.AppRunner;
4+
import org.junit.jupiter.api.AfterEach;
5+
import org.junit.jupiter.api.BeforeEach;
6+
import org.junit.jupiter.api.Test;
7+
import org.springframework.boot.autoconfigure.SpringBootApplication;
8+
import org.springframework.context.annotation.Configuration;
49
import org.springframework.http.HttpEntity;
510
import org.springframework.http.RequestEntity;
11+
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
612
import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest;
713
import org.springframework.security.oauth2.client.registration.ClientRegistration;
814
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationExchange;
@@ -22,7 +28,7 @@ public class AuthzCodeGrantRequestEntityConverterTest {
2228
private ClientRegistration azure;
2329
private ClientRegistration graph;
2430

25-
//@BeforeEach
31+
@BeforeEach
2632
public void setupApp() {
2733
runner = createApp();
2834
runner.start();
@@ -34,26 +40,30 @@ public void setupApp() {
3440

3541
private AppRunner createApp() {
3642
AppRunner result = new AppRunner(DumbApp.class);
37-
result.property("azure.activedirectory.uri", "http://localhost");
43+
result.property("azure.activedirectory.authorization-server-uri", "http://localhost");
3844
result.property("azure.activedirectory.tenant-id", "fake-tenant-id");
3945
result.property("azure.activedirectory.client-id", "fake-client-id");
4046
result.property("azure.activedirectory.client-secret", "fake-client-secret");
4147
result.property("azure.activedirectory.authorization.graph.scopes", "Calendars.Read");
4248
return result;
4349
}
4450

45-
//@AfterEach
51+
@AfterEach
4652
public void tearDownApp() {
4753
runner.stop();
4854
}
4955

50-
//@Test
56+
@Test
5157
public void addScopeForDefaultClient() {
5258
MultiValueMap<String, String> body = convertedBodyOf(createCodeGrantRequest(azure));
53-
assertEquals("openid profile offline_access", body.getFirst("scope"));
59+
assertEquals(
60+
"openid profile offline_access"
61+
+ " https://graph.microsoft.com/User.Read https://graph.microsoft.com/Directory.AccessAsUser.All",
62+
body.getFirst("scope")
63+
);
5464
}
5565

56-
//@Test
66+
@Test
5767
public void noScopeParamForOtherClient() {
5868
MultiValueMap<String, String> body = convertedBodyOf(createCodeGrantRequest(graph));
5969
assertNull(body.get("scope"));
@@ -96,8 +106,9 @@ private OAuth2AuthorizationResponse createAuthorizationResponse() {
96106
return builder.build();
97107
}
98108

99-
//@Configuration
100-
//@SpringBootApplication
101-
//@EnableWebSecurity
102-
public static class DumbApp {}
109+
@Configuration
110+
@SpringBootApplication
111+
@EnableWebSecurity
112+
public static class DumbApp {
113+
}
103114
}

sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/spring/aad/implementation/AzureActiveDirectoryConfigurationTest.java

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package com.azure.spring.aad.implementation;
22

33
import com.azure.test.utils.AppRunner;
4+
import org.junit.Test;
5+
import org.springframework.boot.autoconfigure.SpringBootApplication;
6+
import org.springframework.context.annotation.Configuration;
7+
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
48
import org.springframework.security.oauth2.client.registration.ClientRegistration;
59
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
610

@@ -14,8 +18,7 @@
1418

1519
public class AzureActiveDirectoryConfigurationTest {
1620

17-
//@Test
18-
// TODO: Enable these tests after add AzureActiveDirectoryConfiguration in spring.factories.
21+
@Test
1922
public void clientRegistered() {
2023
try (AppRunner runner = createApp()) {
2124
runner.start();
@@ -36,7 +39,7 @@ public void clientRegistered() {
3639
}
3740
}
3841

39-
//@Test
42+
@Test
4043
public void clientRequiresPermissionRegistered() {
4144
try (AppRunner runner = createApp()) {
4245
runner.property("azure.activedirectory.authorization.graph.scopes", "Calendars.Read");
@@ -54,7 +57,7 @@ public void clientRequiresPermissionRegistered() {
5457
}
5558
}
5659

57-
//@Test
60+
@Test
5861
public void clientRequiresMultiPermissions() {
5962
try (AppRunner runner = createApp()) {
6063
runner.property("azure.activedirectory.authorization.graph.scopes", "Calendars.Read");
@@ -79,7 +82,7 @@ public void clientRequiresMultiPermissions() {
7982
}
8083
}
8184

82-
//@Test
85+
@Test
8386
public void clientRequiresPermissionInDefaultClient() {
8487
try (AppRunner runner = createApp()) {
8588
runner.property("azure.activedirectory.authorization.azure.scopes", "Calendars.Read");
@@ -93,7 +96,7 @@ public void clientRequiresPermissionInDefaultClient() {
9396
}
9497
}
9598

96-
//@Test
99+
@Test
97100
public void aadAwareClientRepository() {
98101
try (AppRunner runner = createApp()) {
99102
runner.property("azure.activedirectory.authorization.graph.scopes", "Calendars.Read");
@@ -103,7 +106,11 @@ public void aadAwareClientRepository() {
103106
ClientRegistration azure = repo.findByRegistrationId("azure");
104107
ClientRegistration graph = repo.findByRegistrationId("graph");
105108

106-
assertDefaultScopes(repo.getAzureClient(), "openid", "profile", "offline_access");
109+
assertDefaultScopes(
110+
repo.getAzureClient(),
111+
"openid", "profile", "offline_access", "https://graph.microsoft.com/User.Read",
112+
"https://graph.microsoft.com/Directory.AccessAsUser.All"
113+
);
107114
assertEquals(repo.getAzureClient().getClient(), azure);
108115

109116
assertFalse(repo.isAuthzClient(azure));
@@ -117,21 +124,25 @@ public void aadAwareClientRepository() {
117124
}
118125
}
119126

120-
//@Test
127+
@Test
121128
public void defaultClientWithAuthzScope() {
122129
try (AppRunner runner = createApp()) {
123130
runner.property("azure.activedirectory.authorization.azure.scopes", "Calendars.Read");
124131
runner.start();
125132

126133
AzureClientRegistrationRepository repo = runner.getBean(AzureClientRegistrationRepository.class);
127-
assertDefaultScopes(repo.getAzureClient(), "openid", "profile", "offline_access", "Calendars.Read");
134+
assertDefaultScopes(
135+
repo.getAzureClient(),
136+
"openid", "profile", "offline_access", "https://graph.microsoft.com/User.Read",
137+
"https://graph.microsoft.com/Directory.AccessAsUser.All", "Calendars.Read"
138+
);
128139
}
129140
}
130141

131-
//@Test
142+
@Test
132143
public void customizeUri() {
133144
try (AppRunner runner = createApp()) {
134-
runner.property("azure.activedirectory.uri", "http://localhost/");
145+
runner.property("azure.activedirectory.authorization-server-uri", "http://localhost/");
135146
runner.start();
136147

137148
AzureClientRegistrationRepository repo = runner.getBean(AzureClientRegistrationRepository.class);
@@ -146,7 +157,7 @@ public void customizeUri() {
146157

147158
private AppRunner createApp() {
148159
AppRunner result = new AppRunner(DumbApp.class);
149-
result.property("azure.activedirectory.uri", "https://login.microsoftonline.com");
160+
result.property("azure.activedirectory.authorization-server-uri", "https://login.microsoftonline.com");
150161
result.property("azure.activedirectory.tenant-id", "fake-tenant-id");
151162
result.property("azure.activedirectory.client-id", "fake-client-id");
152163
result.property("azure.activedirectory.client-secret", "fake-client-secret");
@@ -174,8 +185,9 @@ private List<ClientRegistration> collectClients(Iterable<ClientRegistration> itr
174185
return result;
175186
}
176187

177-
//@Configuration
178-
//@EnableWebSecurity
179-
//@SpringBootApplication
180-
public static class DumbApp {}
188+
@Configuration
189+
@EnableWebSecurity
190+
@SpringBootApplication
191+
public static class DumbApp {
192+
}
181193
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
azure.activedirectory.tenant-id=fake-tenant-id
2+
azure.activedirectory.client-id=fake-client-id
3+
azure.activedirectory.client-secret=fake-client-secret
4+
azure.activedirectory.user-group.allowed-groups=group1, group2
5+
# TODO: Delete the following content after "com.azure.spring.aad.implementation.AzureActiveDirectoryConfiguration"
6+
# added in "sdk/spring/azure-spring-boot/src/main/resources/META-INF/spring.factories"
7+
spring.security.oauth2.client.registration.azure.client-id=fake-client-id
8+
spring.security.oauth2.client.registration.azure.client-secret=fake-client-secret
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# TODO: Delete this file after "com.azure.spring.aad.implementation.AzureActiveDirectoryConfiguration" added in "sdk/spring/azure-spring-boot/src/main/resources/META-INF/spring.factories"
2+
org.springframework.boot.env.EnvironmentPostProcessor=\
3+
com.azure.spring.aad.implementation.AzureActiveDirectoryConfiguration

sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADOAuth2AutoConfiguration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.slf4j.Logger;
88
import org.slf4j.LoggerFactory;
99
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
10+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
1011
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
1112
import org.springframework.boot.autoconfigure.condition.ConditionalOnResource;
1213
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
@@ -59,6 +60,7 @@ public AADOAuth2AutoConfiguration(AADAuthenticationProperties aadAuthProperties,
5960
}
6061

6162
@Bean
63+
@ConditionalOnMissingBean
6264
@ConditionalOnProperty(prefix = "azure.activedirectory.user-group", value = "allowed-groups")
6365
public OAuth2UserService<OidcUserRequest, OidcUser> oidcUserService() {
6466
return new AADOAuth2UserService(aadAuthenticationProperties, serviceEndpointsProperties);

0 commit comments

Comments
 (0)