Skip to content

Commit 770a8fe

Browse files
Avery-DunnSantiago Gonzalezsangonzalsiddhijain
authored
Release 1.11.1 (#461)
* Allow empty set for scopes. Remove empty string if included in scopes for silent request * Trim scopes * Minor code formatting applied to most files (#417) * Initial commit * Remove info flagged by automated build step (#440) * Remove info flagged by automated build step * Remove unneeded references and test for old Azure Germany cloud * Issue #437 fix - Drop validation on subject and issuer values * Fixed tests * Created new app to fix failing tests * Moving tests to an existing file * Adding copyright line * Adding comments * Bump version numbers for 1.11.1 release (#460) Co-authored-by: Santiago Gonzalez <[email protected]> Co-authored-by: Santiago Gonzalez <[email protected]> Co-authored-by: siddhijain <[email protected]> Co-authored-by: siddhijain <[email protected]>
1 parent 770dbc7 commit 770a8fe

File tree

171 files changed

+1217
-1031
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

171 files changed

+1217
-1031
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Quick links:
1616
The library supports the following Java environments:
1717
- Java 8 (or higher)
1818

19-
Current version - 1.11.0
19+
Current version - 1.11.1
2020

2121
You can find the changes for each version in the [change log](https://github.com/AzureAD/microsoft-authentication-library-for-java/blob/master/changelog.txt).
2222

@@ -28,13 +28,13 @@ Find [the latest package in the Maven repository](https://mvnrepository.com/arti
2828
<dependency>
2929
<groupId>com.microsoft.azure</groupId>
3030
<artifactId>msal4j</artifactId>
31-
<version>1.11.0</version>
31+
<version>1.11.1</version>
3232
</dependency>
3333
```
3434
### Gradle
3535

3636
```
37-
compile group: 'com.microsoft.azure', name: 'msal4j', version: '1.11.0'
37+
compile group: 'com.microsoft.azure', name: 'msal4j', version: '1.11.1'
3838
```
3939

4040
## Usage

changelog.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
Version 1.11.1
2+
=============
3+
- Updated Azure Key Vault dependencies to fix error in transitive dependency
4+
- Fixed issue where client assertion validation fails due to mismatched subject and issuer
5+
16
Version 1.11.0
27
=============
38
- Adds ability to override authority in AcquireToken calls

pom.xml

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>com.microsoft.azure</groupId>
55
<artifactId>msal4j</artifactId>
6-
<version>1.11.0</version>
6+
<version>1.11.1</version>
77
<packaging>jar</packaging>
88
<name>msal4j</name>
99
<description>
@@ -99,11 +99,16 @@
9999
<scope>test</scope>
100100
</dependency>
101101
<dependency>
102-
<groupId>com.microsoft.azure</groupId>
103-
<artifactId>azure-keyvault</artifactId>
104-
<version>1.2.1</version>
102+
<groupId>com.azure</groupId>
103+
<artifactId>azure-identity</artifactId>
104+
<version>1.4.2</version>
105105
<scope>test</scope>
106106
</dependency>
107+
<dependency>
108+
<groupId>com.azure</groupId>
109+
<artifactId>azure-security-keyvault-secrets</artifactId>
110+
<version>4.3.5</version>
111+
</dependency>
107112
<dependency>
108113
<groupId>org.seleniumhq.selenium</groupId>
109114
<artifactId>selenium-java</artifactId>

src/integrationtest/java/com.microsoft.aad.msal4j/AcquireTokenInteractiveIT.java

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,75 +24,75 @@ public class AcquireTokenInteractiveIT extends SeleniumTest {
2424
private Config cfg;
2525

2626
@Test(dataProvider = "environments", dataProviderClass = EnvironmentsProvider.class)
27-
public void acquireTokenInteractive_ManagedUser(String environment){
27+
public void acquireTokenInteractive_ManagedUser(String environment) {
2828
cfg = new Config(environment);
2929

3030
User user = labUserProvider.getDefaultUser(cfg.azureEnvironment);
3131
assertAcquireTokenAAD(user);
3232
}
3333

3434
@Test()
35-
public void acquireTokenInteractive_ADFSv2019_OnPrem(){
35+
public void acquireTokenInteractive_ADFSv2019_OnPrem() {
3636
User user = labUserProvider.getOnPremAdfsUser(FederationProvider.ADFS_2019);
3737
assertAcquireTokenADFS2019(user);
3838
}
3939

4040
@Test(dataProvider = "environments", dataProviderClass = EnvironmentsProvider.class)
41-
public void acquireTokenInteractive_ADFSv2019_Federated(String environment){
41+
public void acquireTokenInteractive_ADFSv2019_Federated(String environment) {
4242
cfg = new Config(environment);
4343

4444
User user = labUserProvider.getFederatedAdfsUser(cfg.azureEnvironment, FederationProvider.ADFS_2019);
4545
assertAcquireTokenAAD(user);
4646
}
4747

4848
@Test(dataProvider = "environments", dataProviderClass = EnvironmentsProvider.class)
49-
public void acquireTokenInteractive_ADFSv4_Federated(String environment){
49+
public void acquireTokenInteractive_ADFSv4_Federated(String environment) {
5050
cfg = new Config(environment);
5151

5252
User user = labUserProvider.getFederatedAdfsUser(cfg.azureEnvironment, FederationProvider.ADFS_4);
5353
assertAcquireTokenAAD(user);
5454
}
5555

5656
@Test(dataProvider = "environments", dataProviderClass = EnvironmentsProvider.class)
57-
public void acquireTokenInteractive_ADFSv3_Federated(String environment){
57+
public void acquireTokenInteractive_ADFSv3_Federated(String environment) {
5858
cfg = new Config(environment);
5959

6060
User user = labUserProvider.getFederatedAdfsUser(cfg.azureEnvironment, FederationProvider.ADFS_3);
6161
assertAcquireTokenAAD(user);
6262
}
6363

6464
@Test(dataProvider = "environments", dataProviderClass = EnvironmentsProvider.class)
65-
public void acquireTokenInteractive_ADFSv2_Federated(String environment){
65+
public void acquireTokenInteractive_ADFSv2_Federated(String environment) {
6666
cfg = new Config(environment);
6767

6868
User user = labUserProvider.getFederatedAdfsUser(cfg.azureEnvironment, FederationProvider.ADFS_2);
6969
assertAcquireTokenAAD(user);
7070
}
7171

7272
@Test(dataProvider = "environments", dataProviderClass = EnvironmentsProvider.class)
73-
public void acquireTokenWithAuthorizationCode_B2C_Local(String environment){
73+
public void acquireTokenWithAuthorizationCode_B2C_Local(String environment) {
7474
cfg = new Config(environment);
7575

7676
User user = labUserProvider.getB2cUser(cfg.azureEnvironment, B2CProvider.LOCAL);
7777
assertAcquireTokenB2C(user);
7878
}
7979

8080
@Test
81-
public void acquireTokenInteractive_ManagedUser_InstanceAware(){
81+
public void acquireTokenInteractive_ManagedUser_InstanceAware() {
8282
cfg = new Config(AzureEnvironment.AZURE);
8383

8484
User user = labUserProvider.getDefaultUser(AzureEnvironment.AZURE_US_GOVERNMENT);
8585
assertAcquireTokenInstanceAware(user);
8686
}
8787

88-
private void assertAcquireTokenAAD(User user){
88+
private void assertAcquireTokenAAD(User user) {
8989
PublicClientApplication pca;
9090
try {
9191
pca = PublicClientApplication.builder(
9292
user.getAppId()).
9393
authority(cfg.organizationsAuthority()).
9494
build();
95-
} catch(MalformedURLException ex){
95+
} catch (MalformedURLException ex) {
9696
throw new RuntimeException(ex.getMessage());
9797
}
9898

@@ -107,14 +107,14 @@ private void assertAcquireTokenAAD(User user){
107107
Assert.assertEquals(user.getUpn(), result.account().username());
108108
}
109109

110-
private void assertAcquireTokenADFS2019(User user){
110+
private void assertAcquireTokenADFS2019(User user) {
111111
PublicClientApplication pca;
112112
try {
113113
pca = PublicClientApplication.builder(
114114
TestConstants.ADFS_APP_ID).
115115
authority(TestConstants.ADFS_AUTHORITY).
116116
build();
117-
} catch(MalformedURLException ex){
117+
} catch (MalformedURLException ex) {
118118
throw new RuntimeException(ex.getMessage());
119119
}
120120

@@ -126,15 +126,15 @@ private void assertAcquireTokenADFS2019(User user){
126126
Assert.assertEquals(user.getUpn(), result.account().username());
127127
}
128128

129-
private void assertAcquireTokenB2C(User user){
129+
private void assertAcquireTokenB2C(User user) {
130130

131131
PublicClientApplication pca;
132132
try {
133133
pca = PublicClientApplication.builder(
134134
user.getAppId()).
135135
b2cAuthority(TestConstants.B2C_AUTHORITY_SIGN_IN).
136136
build();
137-
} catch(MalformedURLException ex){
137+
} catch (MalformedURLException ex) {
138138
throw new RuntimeException(ex.getMessage());
139139
}
140140

@@ -189,10 +189,12 @@ public void acquireTokensInHomeAndGuestClouds(String homeCloud, String homeCloud
189189

190190
ITokenCacheAccessAspect persistenceAspect = new ITokenCacheAccessAspect() {
191191
String data;
192+
192193
@Override
193194
public void beforeCacheAccess(ITokenCacheAccessContext iTokenCacheAccessContext) {
194195
iTokenCacheAccessContext.tokenCache().deserialize(data);
195196
}
197+
196198
@Override
197199
public void afterCacheAccess(ITokenCacheAccessContext iTokenCacheAccessContext) {
198200
data = iTokenCacheAccessContext.tokenCache().serialize();
@@ -218,7 +220,7 @@ public void afterCacheAccess(ITokenCacheAccessContext iTokenCacheAccessContext)
218220
private IAuthenticationResult acquireTokenInteractive(
219221
User user,
220222
PublicClientApplication pca,
221-
String scope){
223+
String scope) {
222224

223225
IAuthenticationResult result;
224226
try {
@@ -238,7 +240,7 @@ private IAuthenticationResult acquireTokenInteractive(
238240

239241
result = pca.acquireToken(parameters).get();
240242

241-
} catch(Exception e){
243+
} catch (Exception e) {
242244
LOG.error("Error acquiring token with authCode: " + e.getMessage());
243245
throw new RuntimeException("Error acquiring token with authCode: " + e.getMessage());
244246
}
@@ -248,7 +250,7 @@ private IAuthenticationResult acquireTokenInteractive(
248250
private IAuthenticationResult acquireTokenInteractive_instanceAware(
249251
User user,
250252
PublicClientApplication pca,
251-
String scope){
253+
String scope) {
252254

253255
IAuthenticationResult result;
254256
try {
@@ -268,7 +270,7 @@ private IAuthenticationResult acquireTokenInteractive_instanceAware(
268270

269271
result = pca.acquireToken(parameters).get();
270272

271-
} catch(Exception e){
273+
} catch (Exception e) {
272274
LOG.error("Error acquiring token with authCode: " + e.getMessage());
273275
throw new RuntimeException("Error acquiring token with authCode: " + e.getMessage());
274276
}
@@ -280,12 +282,12 @@ class SeleniumOpenBrowserAction implements OpenBrowserAction {
280282
private User user;
281283
private PublicClientApplication pca;
282284

283-
SeleniumOpenBrowserAction(User user, PublicClientApplication pca){
285+
SeleniumOpenBrowserAction(User user, PublicClientApplication pca) {
284286
this.user = user;
285287
this.pca = pca;
286288
}
287289

288-
public void openBrowser(URL url){
290+
public void openBrowser(URL url) {
289291
seleniumDriver.navigate().to(url);
290292
runSeleniumAutomatedLogin(user, pca);
291293
}

src/integrationtest/java/com.microsoft.aad.msal4j/AcquireTokenSilentIT.java

Lines changed: 60 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.net.MalformedURLException;
1212
import java.util.Collections;
1313
import java.util.Date;
14+
import java.util.HashSet;
1415
import java.util.Set;
1516
import java.util.concurrent.ExecutionException;
1617

@@ -22,7 +23,7 @@ public class AcquireTokenSilentIT {
2223
private Config cfg;
2324

2425
@BeforeClass
25-
public void setUp(){
26+
public void setUp() {
2627
labUserProvider = LabUserProvider.getInstance();
2728
}
2829

@@ -109,13 +110,13 @@ public void acquireTokenSilent_MultipleAccountsInCache_UseCorrectAccount(String
109110
}
110111

111112
@Test(dataProvider = "environments", dataProviderClass = EnvironmentsProvider.class)
112-
public void acquireTokenSilent_ADFS2019(String environment) throws Exception{
113+
public void acquireTokenSilent_ADFS2019(String environment) throws Exception {
113114
cfg = new Config(environment);
114115

115116
UserQueryParameters query = new UserQueryParameters();
116117
query.parameters.put(UserQueryParameters.AZURE_ENVIRONMENT, cfg.azureEnvironment);
117-
query.parameters.put(UserQueryParameters.FEDERATION_PROVIDER, FederationProvider.ADFS_2019);
118-
query.parameters.put(UserQueryParameters.USER_TYPE, UserType.FEDERATED);
118+
query.parameters.put(UserQueryParameters.FEDERATION_PROVIDER, FederationProvider.ADFS_2019);
119+
query.parameters.put(UserQueryParameters.USER_TYPE, UserType.FEDERATED);
119120

120121
User user = labUserProvider.getLabUser(query);
121122

@@ -140,7 +141,7 @@ public void acquireTokenSilent_ADFS2019(String environment) throws Exception{
140141

141142
// Commented out due to unclear B2C behavior causing occasional errors
142143
//@Test
143-
public void acquireTokenSilent_B2C() throws Exception{
144+
public void acquireTokenSilent_B2C() throws Exception {
144145
UserQueryParameters query = new UserQueryParameters();
145146
query.parameters.put(UserQueryParameters.USER_TYPE, UserType.B2C);
146147
query.parameters.put(UserQueryParameters.B2C_PROVIDER, B2CProvider.LOCAL);
@@ -162,7 +163,6 @@ public void acquireTokenSilent_B2C() throws Exception{
162163
}
163164

164165

165-
166166
@Test
167167
public void acquireTokenSilent_usingCommonAuthority_returnCachedAt() throws Exception {
168168
acquireTokenSilent_returnCachedTokens(cfg.organizationsAuthority());
@@ -174,7 +174,7 @@ public void acquireTokenSilent_usingTenantSpecificAuthority_returnCachedAt() thr
174174
}
175175

176176
@Test(dataProvider = "environments", dataProviderClass = EnvironmentsProvider.class)
177-
public void acquireTokenSilent_ConfidentialClient_acquireTokenSilent(String environment) throws Exception{
177+
public void acquireTokenSilent_ConfidentialClient_acquireTokenSilent(String environment) throws Exception {
178178
cfg = new Config(environment);
179179

180180
IConfidentialClientApplication cca = getConfidentialClientApplications();
@@ -221,7 +221,7 @@ public void acquireTokenSilent_ConfidentialClient_acquireTokenSilentDifferentSco
221221
}
222222

223223
@Test(dataProvider = "environments", dataProviderClass = EnvironmentsProvider.class)
224-
public void acquireTokenSilent_WithRefreshOn(String environment) throws Exception{
224+
public void acquireTokenSilent_WithRefreshOn(String environment) throws Exception {
225225
cfg = new Config(environment);
226226

227227
User user = labUserProvider.getDefaultUser(cfg.azureEnvironment);
@@ -295,7 +295,56 @@ public void acquireTokenSilent_TenantAsParameter(String environment) throws Exce
295295
assertTokensAreNotEqual(result, resultWithTenantParam);
296296
}
297297

298-
private IConfidentialClientApplication getConfidentialClientApplications() throws Exception{
298+
@Test(dataProvider = "environments", dataProviderClass = EnvironmentsProvider.class)
299+
public void acquireTokenSilent_emptyStringScope(String environment) throws Exception {
300+
cfg = new Config(environment);
301+
User user = labUserProvider.getDefaultUser(environment);
302+
303+
PublicClientApplication pca = PublicClientApplication.builder(
304+
user.getAppId()).
305+
authority(cfg.organizationsAuthority()).
306+
build();
307+
308+
String emptyScope = StringHelper.EMPTY_STRING;
309+
IAuthenticationResult result = acquireTokenUsernamePassword(user, pca, emptyScope);
310+
assertResultNotNull(result);
311+
312+
IAccount account = pca.getAccounts().join().iterator().next();
313+
IAuthenticationResult silentResult = acquireTokenSilently(pca, account, emptyScope, false);
314+
assertResultNotNull(silentResult);
315+
Assert.assertEquals(result.accessToken(), silentResult.accessToken());
316+
}
317+
318+
@Test(dataProvider = "environments", dataProviderClass = EnvironmentsProvider.class)
319+
public void acquireTokenSilent_emptyScopeSet(String environment) throws Exception {
320+
cfg = new Config(environment);
321+
User user = labUserProvider.getDefaultUser(environment);
322+
323+
Set<String> scopes = new HashSet<>();
324+
PublicClientApplication pca = PublicClientApplication.builder(
325+
user.getAppId()).
326+
authority(cfg.organizationsAuthority()).
327+
build();
328+
329+
IAuthenticationResult result = pca.acquireToken(UserNamePasswordParameters.
330+
builder(scopes,
331+
user.getUpn(),
332+
user.getPassword().toCharArray())
333+
.build())
334+
.get();
335+
assertResultNotNull(result);
336+
337+
IAccount account = pca.getAccounts().join().iterator().next();
338+
IAuthenticationResult silentResult = pca.acquireTokenSilently(SilentParameters.
339+
builder(scopes, account)
340+
.build())
341+
.get();
342+
343+
assertResultNotNull(silentResult);
344+
Assert.assertEquals(result.accessToken(), silentResult.accessToken());
345+
}
346+
347+
private IConfidentialClientApplication getConfidentialClientApplications() throws Exception {
299348
String clientId = cfg.appProvider.getOboAppId();
300349
String password = cfg.appProvider.getOboAppPassword();
301350

@@ -304,8 +353,8 @@ private IConfidentialClientApplication getConfidentialClientApplications() throw
304353
return ConfidentialClientApplication.builder(
305354
clientId, credential).
306355
//authority(MICROSOFT_AUTHORITY)
307-
authority(cfg.tenantSpecificAuthority()).
308-
build();
356+
authority(cfg.tenantSpecificAuthority()).
357+
build();
309358
}
310359

311360
private void acquireTokenSilent_returnCachedTokens(String authority) throws Exception {

0 commit comments

Comments
 (0)