Skip to content

Add integration tests for acquire token silent with B2C and ADFS 2019 accounts #293

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 2, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.net.MalformedURLException;
import java.util.Collections;
import java.util.Set;
import java.util.concurrent.ExecutionException;
Expand All @@ -33,15 +34,8 @@ public void acquireTokenSilent_OrganizationAuthority_TokenRefreshed(String envir
IPublicClientApplication pca = getPublicClientApplicationWithTokensInCache();

IAccount account = pca.getAccounts().join().iterator().next();
SilentParameters parameters = SilentParameters.builder(
Collections.singleton(cfg.graphDefaultScope()),
account).build();

IAuthenticationResult result = pca.acquireTokenSilently(parameters).get();

Assert.assertNotNull(result);
Assert.assertNotNull(result.accessToken());
Assert.assertNotNull(result.idToken());
IAuthenticationResult result = acquireTokenSilently(pca, account, cfg.graphDefaultScope(), false);
assertResultNotNull(result);
}

@Test(dataProvider = "environments", dataProviderClass = EnvironmentsProvider.class)
Expand All @@ -58,22 +52,12 @@ public void acquireTokenSilent_LabAuthority_TokenNotRefreshed(String environment
authority(cfg.organizationsAuthority()).
build();

IAuthenticationResult result = pca.acquireToken(UserNamePasswordParameters.
builder(Collections.singleton(cfg.graphDefaultScope()),
user.getUpn(),
user.getPassword().toCharArray())
.build())
.get();
IAuthenticationResult result = acquireTokenUsernamePassword(user, pca, cfg.graphDefaultScope());

IAccount account = pca.getAccounts().join().iterator().next();
SilentParameters parameters = SilentParameters.builder(
Collections.singleton(cfg.graphDefaultScope()), account).
build();
IAuthenticationResult acquireSilentResult = acquireTokenSilently(pca, account, cfg.graphDefaultScope(), false);
assertResultNotNull(result);

IAuthenticationResult acquireSilentResult = pca.acquireTokenSilently(parameters).get();

Assert.assertNotNull(acquireSilentResult.accessToken());
Assert.assertNotNull(result.idToken());
// Check that access and id tokens are coming from cache
Assert.assertEquals(result.accessToken(), acquireSilentResult.accessToken());
Assert.assertEquals(result.idToken(), acquireSilentResult.idToken());
Expand All @@ -90,27 +74,15 @@ public void acquireTokenSilent_ForceRefresh(String environment) throws Exception
authority(cfg.organizationsAuthority()).
build();

IAuthenticationResult result = pca.acquireToken(UserNamePasswordParameters.
builder(Collections.singleton(cfg.graphDefaultScope()),
user.getUpn(),
user.getPassword().toCharArray())
.build())
.get();
IAuthenticationResult result = acquireTokenUsernamePassword(user, pca, cfg.graphDefaultScope());
assertResultNotNull(result);

IAccount account = pca.getAccounts().join().iterator().next();
SilentParameters parameters = SilentParameters.builder(
Collections.singleton(cfg.graphDefaultScope()), account).
forceRefresh(true).
build();

IAuthenticationResult resultAfterRefresh = pca.acquireTokenSilently(parameters).get();
IAuthenticationResult resultAfterRefresh = acquireTokenSilently(pca, account, cfg.graphDefaultScope(), true);
assertResultNotNull(resultAfterRefresh);

Assert.assertNotNull(resultAfterRefresh);
Assert.assertNotNull(resultAfterRefresh.accessToken());
Assert.assertNotNull(resultAfterRefresh.idToken());
// Check that new refresh and id tokens are being returned
Assert.assertNotEquals(result.accessToken(), resultAfterRefresh.accessToken());
Assert.assertNotEquals(result.idToken(), resultAfterRefresh.idToken());
assertResultRefreshed(result, resultAfterRefresh);
}

@Test(dataProvider = "environments", dataProviderClass = EnvironmentsProvider.class)
Expand All @@ -123,31 +95,72 @@ public void acquireTokenSilent_MultipleAccountsInCache_UseCorrectAccount(String
User user = labUserProvider.getFederatedAdfsUser(cfg.azureEnvironment, FederationProvider.ADFS_4);

// acquire token for different account
pca.acquireToken(UserNamePasswordParameters.
builder(Collections.singleton(cfg.graphDefaultScope()),
user.getUpn(),
user.getPassword().toCharArray())
.build())
.get();
acquireTokenUsernamePassword(user, pca, cfg.graphDefaultScope());

Set<IAccount> accounts = pca.getAccounts().join();
IAccount account = accounts.stream().filter(
x -> x.username().equalsIgnoreCase(
user.getUpn())).findFirst().orElse(null);

SilentParameters parameters = SilentParameters.builder(
Collections.singleton(cfg.graphDefaultScope()), account).
forceRefresh(true).
IAuthenticationResult result = acquireTokenSilently(pca, account, cfg.graphDefaultScope(), false);
assertResultNotNull(result);
Assert.assertEquals(result.account().username(), user.getUpn());
}

@Test(dataProvider = "environments", dataProviderClass = EnvironmentsProvider.class)
public void acquireTokenSilent_ADFS2019(String environment) throws Exception{
cfg = new Config(environment);

UserQueryParameters query = new UserQueryParameters();
query.parameters.put(UserQueryParameters.AZURE_ENVIRONMENT, cfg.azureEnvironment);
query.parameters.put(UserQueryParameters.FEDERATION_PROVIDER, FederationProvider.ADFS_2019);
query.parameters.put(UserQueryParameters.USER_TYPE, UserType.FEDERATED);

User user = labUserProvider.getLabUser(query);

PublicClientApplication pca = PublicClientApplication.builder(
user.getAppId()).
authority(cfg.organizationsAuthority()).
build();

IAuthenticationResult result = pca.acquireTokenSilently(parameters).get();
IAuthenticationResult result = acquireTokenUsernamePassword(user, pca, cfg.graphDefaultScope());
assertResultNotNull(result);

Assert.assertNotNull(result);
Assert.assertNotNull(result.accessToken());
Assert.assertNotNull(result.idToken());
Assert.assertEquals(result.account().username(), user.getUpn());
IAccount account = pca.getAccounts().join().iterator().next();
IAuthenticationResult acquireSilentResult = acquireTokenSilently(pca, account, TestConstants.ADFS_SCOPE, false);
assertResultNotNull(acquireSilentResult);

account = pca.getAccounts().join().iterator().next();
IAuthenticationResult resultAfterRefresh = acquireTokenSilently(pca, account, TestConstants.ADFS_SCOPE, true);
assertResultNotNull(resultAfterRefresh);

assertResultRefreshed(result, resultAfterRefresh);
}

@Test
public void acquireTokenSilent_B2C() throws Exception{
UserQueryParameters query = new UserQueryParameters();
query.parameters.put(UserQueryParameters.USER_TYPE, UserType.B2C);
query.parameters.put(UserQueryParameters.B2C_PROVIDER, B2CProvider.LOCAL);
User user = labUserProvider.getLabUser(query);

PublicClientApplication pca = PublicClientApplication.builder(
user.getAppId()).
b2cAuthority(TestConstants.B2C_AUTHORITY_ROPC).
build();

IAuthenticationResult result = acquireTokenUsernamePassword(user, pca, TestConstants.B2C_READ_SCOPE);
assertResultNotNull(result);

IAccount account = pca.getAccounts().join().iterator().next();
IAuthenticationResult resultAfterRefresh = acquireTokenSilently(pca, account, TestConstants.B2C_READ_SCOPE, true);
assertResultNotNull(resultAfterRefresh);

assertResultRefreshed(result, resultAfterRefresh);
}



@Test
public void acquireTokenSilent_usingCommonAuthority_returnCachedAt() throws Exception {
acquireTokenSilent_returnCachedTokens(cfg.organizationsAuthority());
Expand Down Expand Up @@ -226,12 +239,7 @@ private void acquireTokenSilent_returnCachedTokens(String authority) throws Exce
authority(authority).
build();

IAuthenticationResult interactiveAuthResult = pca.acquireToken(UserNamePasswordParameters.
builder(Collections.singleton(cfg.graphDefaultScope()),
user.getUpn(),
user.getPassword().toCharArray())
.build())
.get();
IAuthenticationResult interactiveAuthResult = acquireTokenUsernamePassword(user, pca, cfg.graphDefaultScope());

Assert.assertNotNull(interactiveAuthResult);

Expand All @@ -254,12 +262,35 @@ private IPublicClientApplication getPublicClientApplicationWithTokensInCache()
authority(cfg.organizationsAuthority()).
build();

pca.acquireToken(
UserNamePasswordParameters.builder(
Collections.singleton(cfg.graphDefaultScope()),
acquireTokenUsernamePassword(user, pca, cfg.graphDefaultScope());
return pca;
}

private IAuthenticationResult acquireTokenSilently(IPublicClientApplication pca, IAccount account, String scope, Boolean forceRefresh) throws InterruptedException, ExecutionException, MalformedURLException {
return pca.acquireTokenSilently(SilentParameters.
builder(Collections.singleton(scope), account).
forceRefresh(forceRefresh).
build())
.get();
}

private IAuthenticationResult acquireTokenUsernamePassword(User user, IPublicClientApplication pca, String scope) throws InterruptedException, ExecutionException {
return pca.acquireToken(UserNamePasswordParameters.
builder(Collections.singleton(scope),
user.getUpn(),
user.getPassword().toCharArray())
.build()).get();
return pca;
.build())
.get();
}

private void assertResultNotNull(IAuthenticationResult result) {
Assert.assertNotNull(result);
Assert.assertNotNull(result.accessToken());
Assert.assertNotNull(result.idToken());
}

private void assertResultRefreshed(IAuthenticationResult result, IAuthenticationResult resultAfterRefresh) {
Assert.assertNotEquals(result.accessToken(), resultAfterRefresh.accessToken());
Assert.assertNotEquals(result.idToken(), resultAfterRefresh.idToken());
}
}