1212import java .net .MalformedURLException ;
1313import java .net .URI ;
1414import java .util .Collections ;
15+ import java .util .Map ;
16+ import java .util .HashMap ;
1517import java .util .Set ;
1618import java .util .concurrent .BlockingQueue ;
1719import java .util .concurrent .LinkedBlockingQueue ;
@@ -27,7 +29,22 @@ public void acquireTokenWithAuthorizationCode_ManagedUser(String environment){
2729 cfg = new Config (environment );
2830
2931 User user = labUserProvider .getDefaultUser (cfg .azureEnvironment );
30- assertAcquireTokenAAD (user );
32+ assertAcquireTokenAAD (user , null );
33+ }
34+
35+ //TODO: Re-enable test once list of claims/capabilities and their expected behavior is known
36+ //@Test(dataProvider = "environments", dataProviderClass = EnvironmentsProvider.class)
37+ public void acquireTokenWithAuthorizationCode_ManagedUserWithClaimsAndCapabilities (String environment ){
38+ cfg = new Config (environment );
39+
40+ User user = labUserProvider .getDefaultUser (cfg .azureEnvironment );
41+
42+ Map <String , Set <String >> claimsAndCapabilities = new HashMap <>();
43+
44+ claimsAndCapabilities .put ("claims" , Collections .singleton (TestConstants .CLAIMS ));
45+ claimsAndCapabilities .put ("clientCapabilities" , TestConstants .CLIENT_CAPABILITIES_EMPTY );
46+
47+ assertAcquireTokenAAD (user , claimsAndCapabilities );
3148 }
3249
3350 @ Test
@@ -41,7 +58,7 @@ public void acquireTokenWithAuthorizationCode_ADFSv2019_Federated(String environ
4158 cfg = new Config (environment );
4259
4360 User user = labUserProvider .getFederatedAdfsUser (cfg .azureEnvironment , FederationProvider .ADFS_2019 );
44- assertAcquireTokenAAD (user );
61+ assertAcquireTokenAAD (user , null );
4562 }
4663
4764 @ Test (dataProvider = "environments" , dataProviderClass = EnvironmentsProvider .class )
@@ -50,23 +67,23 @@ public void acquireTokenWithAuthorizationCode_ADFSv4_Federated(String environmen
5067
5168 User user = labUserProvider .getFederatedAdfsUser (cfg .azureEnvironment , FederationProvider .ADFS_4 );
5269
53- assertAcquireTokenAAD (user );
70+ assertAcquireTokenAAD (user , null );
5471 }
5572
5673 @ Test (dataProvider = "environments" , dataProviderClass = EnvironmentsProvider .class )
5774 public void acquireTokenWithAuthorizationCode_ADFSv3_Federated (String environment ){
5875 cfg = new Config (environment );
5976
6077 User user = labUserProvider .getFederatedAdfsUser (cfg .azureEnvironment , FederationProvider .ADFS_3 );
61- assertAcquireTokenAAD (user );
78+ assertAcquireTokenAAD (user , null );
6279 }
6380
6481 @ Test (dataProvider = "environments" , dataProviderClass = EnvironmentsProvider .class )
6582 public void acquireTokenWithAuthorizationCode_ADFSv2_Federated (String environment ){
6683 cfg = new Config (environment );
6784
6885 User user = labUserProvider .getFederatedAdfsUser (cfg .azureEnvironment , FederationProvider .ADFS_2 );
69- assertAcquireTokenAAD (user );
86+ assertAcquireTokenAAD (user , null );
7087 }
7188
7289 @ Test (dataProvider = "environments" , dataProviderClass = EnvironmentsProvider .class )
@@ -119,7 +136,7 @@ private void assertAcquireTokenADFS2019(User user){
119136 throw new RuntimeException (ex .getMessage ());
120137 }
121138
122- String authCode = acquireAuthorizationCodeAutomated (user , pca );
139+ String authCode = acquireAuthorizationCodeAutomated (user , pca , null );
123140 IAuthenticationResult result = acquireTokenAuthorizationCodeFlow (
124141 pca ,
125142 authCode ,
@@ -131,19 +148,24 @@ private void assertAcquireTokenADFS2019(User user){
131148 Assert .assertEquals (user .getUpn (), result .account ().username ());
132149 }
133150
134- private void assertAcquireTokenAAD (User user ){
151+ private void assertAcquireTokenAAD (User user , Map < String , Set < String >> parameters ){
135152
136153 PublicClientApplication pca ;
154+ Set <String > clientCapabilities = null ;
155+ if (parameters != null ) {
156+ clientCapabilities = parameters .getOrDefault ("clientCapabilities" , null );
157+ }
137158 try {
138- pca = PublicClientApplication .builder (
139- user .getAppId ()).
140- authority (cfg .organizationsAuthority ()).
141- build ();
159+ pca = PublicClientApplication .builder (
160+ user .getAppId ()).
161+ authority (cfg .organizationsAuthority ()).
162+ clientCapabilities (clientCapabilities ).
163+ build ();
142164 } catch (MalformedURLException ex ){
143165 throw new RuntimeException (ex .getMessage ());
144166 }
145167
146- String authCode = acquireAuthorizationCodeAutomated (user , pca );
168+ String authCode = acquireAuthorizationCodeAutomated (user , pca , parameters );
147169 IAuthenticationResult result = acquireTokenAuthorizationCodeFlow (
148170 pca ,
149171 authCode ,
@@ -158,7 +180,7 @@ private void assertAcquireTokenAAD(User user){
158180 private void assertAcquireTokenB2C (User user ){
159181
160182 String appId = LabService .getSecret (TestConstants .B2C_CONFIDENTIAL_CLIENT_LAB_APP_ID );
161- String appSecret = LabService .getSecret (TestConstants .B2C_CONFIDENTIAL_CLIENT_APP_SECRET );
183+ String appSecret = LabService .getSecret (TestConstants .B2C_CONFIDENTIAL_CLIENT_APP_SECRETID );
162184
163185 ConfidentialClientApplication cca ;
164186 try {
@@ -171,7 +193,7 @@ private void assertAcquireTokenB2C(User user){
171193 throw new RuntimeException (ex .getMessage ());
172194 }
173195
174- String authCode = acquireAuthorizationCodeAutomated (user , cca );
196+ String authCode = acquireAuthorizationCodeAutomated (user , cca , null );
175197 IAuthenticationResult result = acquireTokenInteractiveB2C (cca , authCode );
176198
177199 Assert .assertNotNull (result );
@@ -218,7 +240,8 @@ private IAuthenticationResult acquireTokenInteractiveB2C(ConfidentialClientAppli
218240
219241 private String acquireAuthorizationCodeAutomated (
220242 User user ,
221- AbstractClientApplicationBase app ){
243+ AbstractClientApplicationBase app ,
244+ Map <String , Set <String >> parameters ){
222245
223246 BlockingQueue <AuthorizationResult > authorizationCodeQueue = new LinkedBlockingQueue <>();
224247
@@ -231,7 +254,7 @@ private String acquireAuthorizationCodeAutomated(
231254
232255 AuthorizationResult result = null ;
233256 try {
234- String url = buildAuthenticationCodeURL (app );
257+ String url = buildAuthenticationCodeURL (app , parameters );
235258 seleniumDriver .navigate ().to (url );
236259 runSeleniumAutomatedLogin (user , app );
237260
@@ -256,9 +279,15 @@ private String acquireAuthorizationCodeAutomated(
256279 }
257280 return result .code ();
258281 }
259- private String buildAuthenticationCodeURL (AbstractClientApplicationBase app ) {
282+
283+ private String buildAuthenticationCodeURL (AbstractClientApplicationBase app , Map <String , Set <String >> parameters ) {
260284 String scope ;
261285
286+ String claims = null ;
287+ if (parameters != null ) {
288+ claims = String .valueOf (parameters .getOrDefault ("claims" , Collections .singleton ("" )).toArray ()[0 ]);
289+ }
290+
262291 AuthorityType authorityType = app .authenticationAuthority .authorityType ;
263292 if (authorityType == AuthorityType .AAD ){
264293 scope = TestConstants .GRAPH_DEFAULT_SCOPE ;
@@ -272,12 +301,13 @@ else if (authorityType == AuthorityType.ADFS){
272301 throw new RuntimeException ("Authority type not recognized" );
273302 }
274303
275- AuthorizationRequestUrlParameters parameters =
304+ AuthorizationRequestUrlParameters authParameters =
276305 AuthorizationRequestUrlParameters
277306 .builder (TestConstants .LOCALHOST + httpListener .port (),
278307 Collections .singleton (scope ))
308+ .claimsChallenge (claims )
279309 .build ();
280310
281- return app .getAuthorizationRequestUrl (parameters ).toString ();
311+ return app .getAuthorizationRequestUrl (authParameters ).toString ();
282312 }
283313}
0 commit comments