Skip to content

Commit d345e61

Browse files
authored
Merge pull request #628 from AzureAD/SJAIN/add-refresh-in-logic
add refresh_in logic
2 parents 3f653c6 + db6fad5 commit d345e61

File tree

2 files changed

+24
-7
lines changed

2 files changed

+24
-7
lines changed

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

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -318,14 +318,15 @@ public void validateAppTokenProviderAsync() throws Exception{
318318
IClientCredential iClientCredential = ClientCredentialFactory.createFromClientAssertion(
319319
clientAssertion.assertion());
320320

321+
Long refreshInSeconds = new Date().getTime() / 1000 + + 800000;
321322
//builds client with AppTokenProvider
322323
ConfidentialClientApplication cca = ConfidentialClientApplication.
323324
builder(TestConfiguration.AAD_CLIENT_ID, iClientCredential)
324325
.appTokenProvider((parameters) -> {
325326
Assert.assertNotNull(parameters.scopes);
326327
Assert.assertNotNull(parameters.correlationId);
327328
Assert.assertNotNull(parameters.tenantId);
328-
return getAppTokenProviderResult("/default");
329+
return getAppTokenProviderResult("/default", refreshInSeconds);
329330
})
330331
.build();
331332

@@ -338,6 +339,10 @@ public void validateAppTokenProviderAsync() throws Exception{
338339
Assert.assertNotNull(result1.accessToken());
339340

340341
Assert.assertEquals(cca.tokenCache.accessTokens.size(), 1);
342+
//check that refreshOn is set correctly when provided by an app developer
343+
Assert.assertNotNull(cca.tokenCache.accessTokens.values().iterator().next().refreshOn());
344+
Assert.assertEquals(cca.tokenCache.accessTokens.values().iterator().next().refreshOn(), refreshInSeconds.toString());
345+
System.out.println(cca.tokenCache.accessTokens.values().iterator().next().refreshOn());
341346

342347
//Acquire token from cache
343348

@@ -356,7 +361,7 @@ public void validateAppTokenProviderAsync() throws Exception{
356361
Assert.assertNotNull(parameters.scopes);
357362
Assert.assertNotNull(parameters.correlationId);
358363
Assert.assertNotNull(parameters.tenantId);
359-
return getAppTokenProviderResult("/newScope");
364+
return getAppTokenProviderResult("/newScope", 0L);
360365
})
361366
.build();
362367

@@ -369,17 +374,20 @@ public void validateAppTokenProviderAsync() throws Exception{
369374

370375
Assert.assertNotEquals(result2.accessToken(), result3.accessToken());
371376
Assert.assertEquals(cca.tokenCache.accessTokens.size(), 1);
372-
377+
//check that refreshOn is set correctly when a value is not provided by an app developer
378+
Assert.assertNotNull(cca.tokenCache.accessTokens.values().iterator().next().refreshOn());
379+
System.out.println(cca.tokenCache.accessTokens.values().iterator().next().refreshOn());
373380
}
374381

375-
private CompletableFuture<TokenProviderResult> getAppTokenProviderResult(String differentScopesForAt)
382+
private CompletableFuture<TokenProviderResult> getAppTokenProviderResult(String differentScopesForAt,
383+
long refreshInSeconds)
376384
{
377385
long currTimestampSec = new Date().getTime() / 1000;
378386
TokenProviderResult token = new TokenProviderResult();
379387
token.setAccessToken(TestConstants.DEFAULT_ACCESS_TOKEN + differentScopesForAt); //Used to indicate that there is a new access token for a different set of scopes
380388
token.setTenantId("tenantId");
381389
token.setExpiresInSeconds(currTimestampSec + 1000000);
382-
token.setRefreshInSeconds(currTimestampSec + 800000);
390+
token.setRefreshInSeconds(refreshInSeconds);
383391

384392
return CompletableFuture.completedFuture(token);
385393
}

msal4j-sdk/src/main/java/com/microsoft/aad/msal4j/AcquireTokenByAppProviderSupplier.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
*/
1212
class AcquireTokenByAppProviderSupplier extends AuthenticationResultSupplier {
1313

14+
private static final int TWO_HOURS = 2*3600;
15+
1416
private AppTokenProviderParameters appTokenProviderParameters;
1517

1618
private ClientCredentialRequest clientCredentialRequest;
@@ -23,7 +25,7 @@ class AcquireTokenByAppProviderSupplier extends AuthenticationResultSupplier {
2325
this.appTokenProviderParameters = appTokenProviderParameters;
2426
}
2527

26-
private static void validateTokenProviderResult(TokenProviderResult tokenProviderResult) {
28+
private static void validateAndUpdateTokenProviderResult(TokenProviderResult tokenProviderResult) {
2729
if (null == tokenProviderResult.getAccessToken() || tokenProviderResult.getAccessToken().isEmpty()) {
2830
handleInvalidExternalValueError(tokenProviderResult.getAccessToken());
2931
}
@@ -35,6 +37,13 @@ private static void validateTokenProviderResult(TokenProviderResult tokenProvide
3537
if (null == tokenProviderResult.getTenantId() || tokenProviderResult.getTenantId().isEmpty()) {
3638
handleInvalidExternalValueError(tokenProviderResult.getTenantId());
3739
}
40+
41+
if (0 == tokenProviderResult.getRefreshInSeconds()){
42+
long expireInSeconds = tokenProviderResult.getExpiresInSeconds();
43+
if(expireInSeconds >= TWO_HOURS){
44+
tokenProviderResult.setRefreshInSeconds(expireInSeconds/2);
45+
}
46+
}
3847
}
3948

4049
private static void handleInvalidExternalValueError(String nameOfValue) {
@@ -70,7 +79,7 @@ public AuthenticationResult fetchTokenUsingAppTokenProvider(AppTokenProviderPara
7079
throw new MsalAzureSDKException(ex);
7180
}
7281

73-
validateTokenProviderResult(tokenProviderResult);
82+
validateAndUpdateTokenProviderResult(tokenProviderResult);
7483

7584
return AuthenticationResult.builder()
7685
.accessToken(tokenProviderResult.getAccessToken())

0 commit comments

Comments
 (0)