Skip to content

Commit 2693f86

Browse files
committed
Working proof-of-concept
1 parent 4bcd9e8 commit 2693f86

19 files changed

Lines changed: 1604 additions & 119 deletions

msal4j-sdk/pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,16 @@
129129
<version>2.14.0</version>
130130
<scope>test</scope>
131131
</dependency>
132+
<dependency>
133+
<groupId>com.azure</groupId>
134+
<artifactId>azure-security-keyvault-certificates</artifactId>
135+
<version>4.5.0</version>
136+
</dependency>
137+
<dependency>
138+
<groupId>com.azure</groupId>
139+
<artifactId>azure-identity</artifactId>
140+
<version>1.10.0</version>
141+
</dependency>
132142
</dependencies>
133143

134144
<!-- force https -->

msal4j-sdk/src/integrationtest/java/com.microsoft.aad.msal4j/ClientCredentialsIT.java

Lines changed: 23 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@
33

44
package com.microsoft.aad.msal4j;
55

6-
import labapi.AppCredentialProvider;
7-
import labapi.AzureEnvironment;
8-
import labapi.LabUserProvider;
9-
import labapi.User;
6+
import com.microsoft.aad.msal4j.labapi2.KeyVaultSecretsProvider;
7+
import com.microsoft.aad.msal4j.labapi2.LabServiceApi;
108
import org.junit.jupiter.api.Test;
119
import org.junit.jupiter.api.TestInstance;
1210
import org.junit.jupiter.api.BeforeAll;
@@ -21,21 +19,21 @@
2119
import java.security.UnrecoverableKeyException;
2220
import java.security.cert.CertificateException;
2321
import java.util.Collections;
24-
import java.util.HashMap;
25-
import java.util.Map;
2622
import java.util.concurrent.Callable;
2723

2824
import static com.microsoft.aad.msal4j.TestConstants.KEYVAULT_DEFAULT_SCOPE;
2925

3026
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
3127
class ClientCredentialsIT {
3228
private IClientCertificate certificate;
33-
private LabUserProvider labUserProvider;
29+
private KeyVaultSecretsProvider keyVaultSecretsProvider;
30+
private LabServiceApi labServiceApi;
3431

3532
@BeforeAll
3633
void init() throws CertificateException, UnrecoverableKeyException, NoSuchAlgorithmException, KeyStoreException, NoSuchProviderException, IOException {
3734
certificate = CertificateHelper.getClientCertificate();
38-
labUserProvider = LabUserProvider.getInstance();
35+
keyVaultSecretsProvider = new KeyVaultSecretsProvider();
36+
labServiceApi = new LabServiceApi();
3937
}
4038

4139
@Test
@@ -46,8 +44,7 @@ void acquireTokenClientCredentials_ClientCertificate() throws Exception {
4644

4745
@Test
4846
void acquireTokenClientCredentials_ClientSecret() throws Exception {
49-
AppCredentialProvider appProvider = new AppCredentialProvider(AzureEnvironment.AZURE);
50-
final String clientId = appProvider.getLabVaultAppId();
47+
final String clientId = keyVaultSecretsProvider.getSecretByName("LabVaultAppID").getValue();
5148
IClientCredential credential = CertificateHelper.getClientCertificate();
5249

5350
assertAcquireTokenCommon(clientId, credential, TestConstants.MICROSOFT_AUTHORITY);
@@ -64,28 +61,21 @@ void acquireTokenClientCredentials_ClientAssertion() throws Exception {
6461
assertAcquireTokenCommon(clientId, credential, TestConstants.MICROSOFT_AUTHORITY);
6562
}
6663

67-
@Test
68-
void acquireTokenClientCredentials_ClientSecret_Ciam() throws Exception {
69-
70-
User user = labUserProvider.getCiamCudUser();
71-
String clientId = user.getAppId();
72-
73-
AppCredentialProvider appProvider = new AppCredentialProvider(AzureEnvironment.CIAM);
74-
IClientCredential credential = ClientCredentialFactory.createFromSecret(appProvider.getOboAppPassword());
75-
76-
ConfidentialClientApplication cca = ConfidentialClientApplication.builder(
77-
clientId, credential).
78-
authority("https://" + user.getLabName() + ".ciamlogin.com/").
79-
build();
80-
81-
IAuthenticationResult result = cca.acquireToken(ClientCredentialParameters
82-
.builder(Collections.singleton(TestConstants.DEFAULT_SCOPE))
83-
.build())
84-
.get();
85-
86-
assertNotNull(result);
87-
assertNotNull(result.accessToken());
88-
}
64+
// @Test
65+
// void acquireTokenClientCredentials_ClientSecret_Ciam() throws Exception {
66+
// User user = LabUserHelper.getCiamUserge(labServiceApi);
67+
// String clientId = user.getAppId();
68+
//
69+
// String ciamPassword = keyVaultSecretsProvider.getSecretByName("CiamAppPassword").getValu
70+
//
71+
// IAuthenticationResult result = cca.acquireToken(ClientCredentialParameters
72+
// .builder(Collections.singleton(TestConstants.DEFAULT_SCOPE))
73+
// .build())
74+
// .get();
75+
//
76+
// assertNotNull(result);
77+
// assertNotNull(result.accessToken());
78+
// }
8979

9080
@Test
9181
void acquireTokenClientCredentials_Certificate_CiamCud() throws Exception {
@@ -132,8 +122,7 @@ void acquireTokenClientCredentials_Callback() throws Exception {
132122

133123
@Test
134124
void acquireTokenClientCredentials_DefaultCacheLookup() throws Exception {
135-
AppCredentialProvider appProvider = new AppCredentialProvider(AzureEnvironment.AZURE);
136-
final String clientId = appProvider.getLabVaultAppId();
125+
final String clientId = keyVaultSecretsProvider.getSecretByName("LabVaultAppID").getValue();
137126

138127
ConfidentialClientApplication cca = ConfidentialClientApplication.builder(
139128
clientId, CertificateHelper.getClientCertificate()).

msal4j-sdk/src/integrationtest/java/com.microsoft.aad.msal4j/UsernamePasswordIT.java

Lines changed: 55 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,28 @@
33

44
package com.microsoft.aad.msal4j;
55

6-
import labapi.*;
6+
import com.microsoft.aad.msal4j.labapi2.*;
7+
import com.microsoft.aad.msal4j.labapi2.Config;
78
import org.junit.jupiter.api.Test;
89
import org.junit.jupiter.api.TestInstance;
910
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
1011
import org.junit.jupiter.params.ParameterizedTest;
1112
import org.junit.jupiter.params.provider.MethodSource;
12-
import org.junit.jupiter.api.BeforeAll;
1313
import static org.junit.jupiter.api.Assertions.assertEquals;
1414

1515
import java.util.Collections;
16-
import java.util.HashMap;
17-
import java.util.Map;
1816

1917
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
2018
class UsernamePasswordIT {
21-
private LabUserProvider labUserProvider;
22-
2319
private Config cfg;
2420

25-
@BeforeAll
26-
void setUp() {
27-
labUserProvider = LabUserProvider.getInstance();
28-
}
29-
3021
@ParameterizedTest
3122
@MethodSource("com.microsoft.aad.msal4j.EnvironmentsProvider#createData")
3223
void acquireTokenWithUsernamePassword_Managed(String environment) throws Exception {
3324
cfg = new Config(environment);
3425

35-
User user = labUserProvider.getDefaultUser(cfg.azureEnvironment);
36-
37-
assertAcquireTokenCommon(user, cfg.organizationsAuthority(), cfg.graphDefaultScope(), user.getAppId());
26+
LabResponse labResponse = LabUserHelper.getDefaultUserAsync(environment).join();
27+
assertAcquireTokenCommon(labResponse.getUser(), cfg.organizationsAuthority(), cfg.graphDefaultScope(), labResponse.getApp().getAppId());
3828
}
3929

4030
@ParameterizedTest
@@ -43,89 +33,73 @@ void acquireTokenWithUsernamePassword_Managed(String environment) throws Excepti
4333
void acquireTokenWithUsernamePassword_ADFSv2019_Federated(String environment) throws Exception {
4434
cfg = new Config(environment);
4535

46-
UserQueryParameters query = new UserQueryParameters();
47-
query.parameters.put(UserQueryParameters.AZURE_ENVIRONMENT, cfg.azureEnvironment);
48-
query.parameters.put(UserQueryParameters.FEDERATION_PROVIDER, FederationProvider.ADFS_2019);
49-
query.parameters.put(UserQueryParameters.USER_TYPE, UserType.FEDERATED);
36+
LabResponse labResponse = LabUserHelper.getDefaultAdfsUserAsync(environment).join();
37+
LabUser user = labResponse.getUser();
5038

51-
User user = labUserProvider.getLabUser(query);
52-
53-
assertAcquireTokenCommon(user, cfg.organizationsAuthority(), cfg.graphDefaultScope(), user.getAppId());
39+
assertAcquireTokenCommon(user, cfg.organizationsAuthority(), cfg.graphDefaultScope(), labResponse.getApp().getAppId());
5440
}
5541

5642
@Test
5743
@DisabledIfSystemProperty(named = "adfs.disabled", matches = "true")
5844
void acquireTokenWithUsernamePassword_ADFSv2019_OnPrem() throws Exception {
59-
UserQueryParameters query = new UserQueryParameters();
60-
query.parameters.put(UserQueryParameters.FEDERATION_PROVIDER, FederationProvider.ADFS_2019);
61-
query.parameters.put(UserQueryParameters.USER_TYPE, UserType.ON_PREM);
62-
63-
User user = labUserProvider.getLabUser(query);
45+
LabResponse labResponse = LabUserHelper.getDefaultAdfsUserAsync().join();
46+
LabUser user = labResponse.getUser();
6447

6548
assertAcquireTokenCommon(user, TestConstants.ADFS_AUTHORITY, TestConstants.ADFS_SCOPE, TestConstants.ADFS_APP_ID);
6649
}
6750

68-
@ParameterizedTest
69-
@MethodSource("com.microsoft.aad.msal4j.EnvironmentsProvider#createData")
70-
@DisabledIfSystemProperty(named = "adfs.disabled", matches = "true")
71-
void acquireTokenWithUsernamePassword_ADFSv4(String environment) throws Exception {
72-
cfg = new Config(environment);
73-
74-
UserQueryParameters query = new UserQueryParameters();
75-
query.parameters.put(UserQueryParameters.AZURE_ENVIRONMENT, cfg.azureEnvironment);
76-
query.parameters.put(UserQueryParameters.FEDERATION_PROVIDER, FederationProvider.ADFS_4);
77-
query.parameters.put(UserQueryParameters.USER_TYPE, UserType.FEDERATED);
78-
79-
User user = labUserProvider.getLabUser(query);
80-
81-
assertAcquireTokenCommon(user, cfg.organizationsAuthority(), cfg.graphDefaultScope(), user.getAppId());
82-
}
83-
84-
@Test
85-
void acquireTokenWithUsernamePassword_AuthorityWithPort() throws Exception {
86-
User user = labUserProvider.getDefaultUser();
87-
88-
assertAcquireTokenCommon(
89-
user,
90-
TestConstants.COMMON_AUTHORITY_WITH_PORT,
91-
TestConstants.GRAPH_DEFAULT_SCOPE,
92-
user.getAppId());
93-
}
94-
95-
@Test
96-
void acquireTokenWithUsernamePassword_Ciam() throws Exception {
97-
Map<String, String> extraQueryParameters = new HashMap<>();
98-
99-
User user = labUserProvider.getCiamCudUser();
100-
PublicClientApplication pca = PublicClientApplication.builder(user.getAppId())
101-
.authority("https://" + user.getLabName() + ".ciamlogin.com/")
102-
.build();
103-
104-
IAuthenticationResult result = pca.acquireToken(UserNamePasswordParameters.
105-
builder(Collections.singleton(TestConstants.USER_READ_SCOPE),
106-
user.getUpn(),
107-
user.getPassword().toCharArray())
108-
.extraQueryParameters(extraQueryParameters)
109-
.build())
110-
.get();
111-
112-
IntegrationTestHelper.assertAccessAndIdTokensNotNull(result);
113-
}
114-
115-
private void assertAcquireTokenCommon(User user, String authority, String scope, String appId)
51+
// @Test
52+
// void acquireTokenWithUsernamePassword_AuthorityWithPort() throws Exception {
53+
// LabResponse labResponse = LabUserHelper.getDefaultUserAsync().join();
54+
// LabUser user = labResponse.getUser();
55+
//
56+
// assertAcquireTokenCommon(
57+
// user,
58+
// TestConstants.COMMON_AUTHORITY_WITH_PORT,
59+
// TestConstants.GRAPH_DEFAULT_SCOPE,
60+
// labResponse.getApp().getAppId());
61+
// }
62+
63+
// @Test
64+
// void acquireTokenWithUsernamePassword_Ciam() throws Exception {
65+
// Map<String, String> extraQueryParameters = new HashMap<>();
66+
//
67+
// UserQuery query = new UserQuery();
68+
// query.setUserType(LabServiceParameters.UserType.CLOUD);
69+
// query.setAzureEnvironment(LabServiceParameters.AzureEnvironment.AZURE_CIAM);
70+
//
71+
// LabResponse labResponse = LabUserHelper.getLabUserDataAsync(query).join();
72+
//
73+
// LabUser user = labResponse.getUser(); PublicClientApplication pca = PublicClientApplication.builder(user.getAppId())
74+
// .authority("https://" + user.getLabName() + ".ciamlogin.com/")
75+
// .build();
76+
//
77+
// IAuthenticationResult result = pca.acquireToken(UserNamePasswordParameters.
78+
// builder(Collections.singleton(TestConstants.USER_READ_SCOPE),
79+
// user.getUpn(),
80+
// user.getPassword().toCharArray())
81+
// .extraQueryParameters(extraQueryParameters)
82+
// .build())
83+
// .get();
84+
//
85+
// IntegrationTestHelper.assertAccessAndIdTokensNotNull(result);
86+
// }
87+
88+
private void assertAcquireTokenCommon(LabUser user, String authority, String scope, String appId)
11689
throws Exception {
11790

11891
PublicClientApplication pca = PublicClientApplication.builder(
11992
appId).
12093
authority(authority).
12194
build();
12295

96+
System.out.println("Scope: " + scope);
97+
System.out.println("UPN: " + user.getUpn());
12398
IAuthenticationResult result = pca.acquireToken(UserNamePasswordParameters.
12499
builder(Collections.singleton(scope),
125100
user.getUpn(),
126101
user.getPassword().toCharArray())
127102
.build())
128-
129103
.get();
130104

131105
IntegrationTestHelper.assertAccessAndIdTokensNotNull(result);
@@ -134,13 +108,11 @@ private void assertAcquireTokenCommon(User user, String authority, String scope,
134108

135109
@Test
136110
void acquireTokenWithUsernamePassword_B2C_CustomAuthority() throws Exception {
137-
UserQueryParameters query = new UserQueryParameters();
138-
query.parameters.put(UserQueryParameters.USER_TYPE, UserType.B2C);
139-
query.parameters.put(UserQueryParameters.B2C_PROVIDER, B2CProvider.LOCAL);
140-
User user = labUserProvider.getLabUser(query);
111+
LabResponse labResponse = LabUserHelper.getB2CLocalAccountAsync().join();
112+
LabUser user = labResponse.getUser();
141113

142114
PublicClientApplication pca = PublicClientApplication.builder(
143-
user.getAppId()).
115+
labResponse.getApp().getAppId()).
144116
b2cAuthority(TestConstants.B2C_AUTHORITY_ROPC).
145117
build();
146118

@@ -166,13 +138,11 @@ void acquireTokenWithUsernamePassword_B2C_CustomAuthority() throws Exception {
166138

167139
@Test
168140
void acquireTokenWithUsernamePassword_B2C_LoginMicrosoftOnline() throws Exception {
169-
UserQueryParameters query = new UserQueryParameters();
170-
query.parameters.put(UserQueryParameters.USER_TYPE, UserType.B2C);
171-
query.parameters.put(UserQueryParameters.B2C_PROVIDER, B2CProvider.LOCAL);
172-
User user = labUserProvider.getLabUser(query);
141+
LabResponse labResponse = LabUserHelper.getB2CLocalAccountAsync().join();
142+
LabUser user = labResponse.getUser();
173143

174144
PublicClientApplication pca = PublicClientApplication.builder(
175-
user.getAppId()).
145+
labResponse.getApp().getAppId()).
176146
b2cAuthority(TestConstants.B2C_MICROSOFTLOGIN_ROPC).
177147
build();
178148

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
package com.microsoft.aad.msal4j.labapi2;
5+
6+
public class AppCredentialProvider {
7+
8+
private String clientId;
9+
10+
public AppCredentialProvider(String azureEnvironment) {
11+
12+
switch (azureEnvironment) {
13+
case AzureEnvironment.AZURE:
14+
clientId = "c0485386-1e9a-4663-bc96-7ab30656de7f";
15+
16+
break;
17+
case AzureEnvironment.AZURE_US_GOVERNMENT:
18+
clientId = LabApiConstants.ARLINGTON_APP_ID;
19+
break;
20+
default:
21+
throw new UnsupportedOperationException("Azure Environment - " + azureEnvironment + " unsupported");
22+
}
23+
}
24+
25+
public String getAppId() {
26+
return clientId;
27+
}
28+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
package com.microsoft.aad.msal4j.labapi2;
5+
6+
public class AzureEnvironment {
7+
8+
public static final String AZURE = "azurecloud";
9+
public static final String AZURE_US_GOVERNMENT = "azureusgovernment";
10+
}

0 commit comments

Comments
 (0)