Skip to content

Commit e8c10a5

Browse files
author
sgonzalezMSFT
committed
Change AsymmetricKeyCredential to ClientCertificate
1 parent 7e43d80 commit e8c10a5

File tree

10 files changed

+47
-51
lines changed

10 files changed

+47
-51
lines changed

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,13 @@
1818
import java.security.cert.X509Certificate;
1919
import java.util.Collections;
2020

21-
import static com.microsoft.aad.msal4j.TestConstants.GRAPH_DEFAULT_SCOPE;
2221
import static com.microsoft.aad.msal4j.TestConstants.KEYVAULT_DEFAULT_SCOPE;
2322

2423
@Test
2524
public class ClientCredentialsIT {
2625

2726
@Test
28-
public void acquireTokenClientCredentials_AsymmetricKeyCredential() throws Exception{
27+
public void acquireTokenClientCredentials_ClientCertificate() throws Exception{
2928
String clientId = "55e7e5af-ca53-482d-9aa3-5cb1cc8eecb5";
3029
IClientCredential credential = getCertificateFromKeyStore();
3130
assertAcquireTokenCommon(clientId, credential);
@@ -48,7 +47,7 @@ public void acquireTokenClientCredentials_ClientAssertion() throws Exception{
4847

4948
ClientAssertion clientAssertion = JwtHelper.buildJwt(
5049
clientId,
51-
(AsymmetricKeyCredential) certificateFromKeyStore,
50+
(ClientCertificate) certificateFromKeyStore,
5251
"https://login.microsoftonline.com/common/oauth2/v2.0/token");
5352

5453

@@ -73,7 +72,6 @@ private void assertAcquireTokenCommon(String clientId, IClientCredential credent
7372
Assert.assertNotNull(result.accessToken());
7473
}
7574

76-
7775
private IClientCredential getCertificateFromKeyStore() throws
7876
NoSuchProviderException, KeyStoreException, IOException, NoSuchAlgorithmException,
7977
CertificateException, UnrecoverableKeyException {

src/main/java/com/microsoft/aad/msal4j/AsymmetricKeyCredential.java renamed to src/main/java/com/microsoft/aad/msal4j/ClientCertificate.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import lombok.experimental.Accessors;
2525
import org.apache.commons.codec.binary.Base64;
2626

27-
final class AsymmetricKeyCredential implements IAsymmetricKeyCredential {
27+
final class ClientCertificate implements IClientCertificate {
2828

2929
private final static int MIN_KEY_SIZE_IN_BITS = 2048;
3030

@@ -34,7 +34,7 @@ final class AsymmetricKeyCredential implements IAsymmetricKeyCredential {
3434

3535
private final X509Certificate publicCertificate;
3636

37-
private AsymmetricKeyCredential(final PrivateKey key, final X509Certificate publicCertificate) {
37+
private ClientCertificate(final PrivateKey key, final X509Certificate publicCertificate) {
3838
if (key == null) {
3939
throw new NullPointerException("PrivateKey is null or empty");
4040
}
@@ -71,15 +71,15 @@ else if("sun.security.mscapi.RSAPrivateKey".equals(key.getClass().getName())){
7171

7272
public String publicCertificateHash()
7373
throws CertificateEncodingException, NoSuchAlgorithmException {
74-
return Base64.encodeBase64String(AsymmetricKeyCredential
74+
return Base64.encodeBase64String(ClientCertificate
7575
.getHash(this.publicCertificate.getEncoded()));
7676
}
7777

7878
public String publicCertificate() throws CertificateEncodingException {
7979
return Base64.encodeBase64String(this.publicCertificate.getEncoded());
8080
}
8181

82-
static AsymmetricKeyCredential create(final InputStream pkcs12Certificate, final String password)
82+
static ClientCertificate create(final InputStream pkcs12Certificate, final String password)
8383
throws KeyStoreException, NoSuchProviderException,
8484
NoSuchAlgorithmException, CertificateException, IOException, UnrecoverableKeyException {
8585
final KeyStore keystore = KeyStore.getInstance("PKCS12", "SunJSSE");
@@ -93,8 +93,8 @@ static AsymmetricKeyCredential create(final InputStream pkcs12Certificate, final
9393
return create(key, publicCertificate);
9494
}
9595

96-
static AsymmetricKeyCredential create(final PrivateKey key, final X509Certificate publicCertificate) {
97-
return new AsymmetricKeyCredential(key, publicCertificate);
96+
static ClientCertificate create(final PrivateKey key, final X509Certificate publicCertificate) {
97+
return new ClientCertificate(key, publicCertificate);
9898
}
9999

100100
private static byte[] getHash(final byte[] inputBytes) throws NoSuchAlgorithmException {

src/main/java/com/microsoft/aad/msal4j/ClientCredentialFactory.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,31 +24,31 @@ public static IClientSecret createFromSecret(String secret){
2424
}
2525

2626
/**
27-
* Static method to create a {@link AsymmetricKeyCredential} instance from a certificate
27+
* Static method to create a {@link ClientCertificate} instance from a certificate
2828
* @param pkcs12Certificate InputStream containing PCKS12 formatted certificate
2929
* @param password certificate password
30-
* @return {@link AsymmetricKeyCredential}
30+
* @return {@link ClientCertificate}
3131
* @throws CertificateException
3232
* @throws UnrecoverableKeyException
3333
* @throws NoSuchAlgorithmException
3434
* @throws KeyStoreException
3535
* @throws NoSuchProviderException
3636
* @throws IOException
3737
*/
38-
public static IAsymmetricKeyCredential createFromCertificate(final InputStream pkcs12Certificate, final String password)
38+
public static IClientCertificate createFromCertificate(final InputStream pkcs12Certificate, final String password)
3939
throws CertificateException, UnrecoverableKeyException, NoSuchAlgorithmException,
4040
KeyStoreException, NoSuchProviderException, IOException {
41-
return AsymmetricKeyCredential.create(pkcs12Certificate, password);
41+
return ClientCertificate.create(pkcs12Certificate, password);
4242
}
4343

4444
/**
45-
* Static method to create a {@link AsymmetricKeyCredential} instance.
45+
* Static method to create a {@link ClientCertificate} instance.
4646
* @param key RSA private key to sign the assertion.
4747
* @param publicCertificate x509 public certificate used for thumbprint
48-
* @return {@link AsymmetricKeyCredential}
48+
* @return {@link ClientCertificate}
4949
*/
50-
public static IAsymmetricKeyCredential createFromCertificate(final PrivateKey key, final X509Certificate publicCertificate) {
51-
return AsymmetricKeyCredential.create(key, publicCertificate);
50+
public static IClientCertificate createFromCertificate(final PrivateKey key, final X509Certificate publicCertificate) {
51+
return ClientCertificate.create(key, publicCertificate);
5252
}
5353

5454
/**

src/main/java/com/microsoft/aad/msal4j/ConfidentialClientApplication.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,10 @@ private void initClientAuthentication(IClientCredential clientCredential) {
6767
clientAuthentication = new ClientSecretPost(
6868
new ClientID(clientId()),
6969
new Secret(((ClientSecret) clientCredential).clientSecret()));
70-
} else if (clientCredential instanceof AsymmetricKeyCredential) {
70+
} else if (clientCredential instanceof ClientCertificate) {
7171
ClientAssertion clientAssertion = JwtHelper.buildJwt(
7272
clientId(),
73-
(AsymmetricKeyCredential) clientCredential,
73+
(ClientCertificate) clientCredential,
7474
this.authenticationAuthority.selfSignedJwtAudience());
7575

7676
clientAuthentication = createClientAuthFromClientAssertion(clientAssertion);

src/main/java/com/microsoft/aad/msal4j/IAsymmetricKeyCredential.java renamed to src/main/java/com/microsoft/aad/msal4j/IClientCertificate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
/**
1111
* Credential type containing X509 public certificate and RSA private key.
1212
*/
13-
public interface IAsymmetricKeyCredential extends IClientCredential{
13+
public interface IClientCertificate extends IClientCredential{
1414

1515
/**
1616
* Returns private key of the credential.

src/main/java/com/microsoft/aad/msal4j/JwtHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
final class JwtHelper {
2222

23-
static ClientAssertion buildJwt(String clientId, final AsymmetricKeyCredential credential,
23+
static ClientAssertion buildJwt(String clientId, final ClientCertificate credential,
2424
final String jwtAudience) throws MsalClientException {
2525
if (StringHelper.isBlank(clientId)) {
2626
throw new IllegalArgumentException("clientId is null or empty");

src/test/java/com/microsoft/aad/msal4j/AsymmetricKeyCredentialTest.java renamed to src/test/java/com/microsoft/aad/msal4j/ClientCertificateTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616

1717
@Test(groups = { "checkin" })
1818
@PrepareForTest({ RSAPrivateKey.class })
19-
public class AsymmetricKeyCredentialTest extends AbstractMsalTests {
19+
public class ClientCertificateTest extends AbstractMsalTests {
2020

2121
@Test(expectedExceptions = NullPointerException.class, expectedExceptionsMessageRegExp = "PrivateKey is null or empty")
2222
public void testNullKey() {
23-
AsymmetricKeyCredential.create((PrivateKey) null, null);
23+
ClientCertificate.create((PrivateKey) null, null);
2424
}
2525

2626
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "certificate key size must be at least 2048")
@@ -30,7 +30,7 @@ public void testInvalidKeysize() {
3030
EasyMock.expect(modulus.bitLength()).andReturn(2047).times(1);
3131
EasyMock.expect(key.getModulus()).andReturn(modulus).times(1);
3232
EasyMock.replay(modulus, key);
33-
AsymmetricKeyCredential.create(key, null);
33+
ClientCertificate.create(key, null);
3434
}
3535

3636
@Test
@@ -40,7 +40,7 @@ public void testGetClient() {
4040
EasyMock.expect(modulus.bitLength()).andReturn(2048).times(1);
4141
EasyMock.expect(key.getModulus()).andReturn(modulus).times(1);
4242
EasyMock.replay(modulus, key);
43-
final AsymmetricKeyCredential kc = AsymmetricKeyCredential.create(key, null);
43+
final ClientCertificate kc = ClientCertificate.create(key, null);
4444
assertNotNull(kc);
4545
}
4646

@@ -51,7 +51,7 @@ public void testGetKey() {
5151
EasyMock.expect(modulus.bitLength()).andReturn(2048).times(1);
5252
EasyMock.expect(key.getModulus()).andReturn(modulus).times(1);
5353
EasyMock.replay(modulus, key);
54-
final AsymmetricKeyCredential kc = AsymmetricKeyCredential.create(key, null);
54+
final ClientCertificate kc = ClientCertificate.create(key, null);
5555
assertNotNull(kc);
5656
}
5757
}

src/test/java/com/microsoft/aad/msal4j/ConfidentialClientApplicationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
@PowerMockIgnore({"javax.net.ssl.*"})
2727
@Test(groups = { "checkin" })
2828
@PrepareForTest({ ConfidentialClientApplication.class,
29-
AsymmetricKeyCredential.class, UserDiscoveryRequest.class })
29+
ClientCertificate.class, UserDiscoveryRequest.class })
3030
public class ConfidentialClientApplicationTest extends PowerMockTestCase {
3131

3232
private ConfidentialClientApplication app = null;

src/test/java/com/microsoft/aad/msal4j/OAuthRequestValidationTest.java

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,25 @@ public class OAuthRequestValidationTest extends PowerMockTestCase {
7474

7575
private static String query;
7676

77-
public OAuthRequestValidationTest() throws MalformedURLException {
78-
}
79-
77+
@SuppressWarnings("unchecked")
8078
@BeforeMethod
81-
public void init() {
79+
public void init() throws Exception{
80+
81+
PowerMock.mockStatic(HttpHelper.class);
82+
83+
EasyMock.expect(
84+
HttpHelper.executeHttpRequest(
85+
EasyMock.isA(Logger.class),
86+
EasyMock.isA(HttpMethod.class),
87+
EasyMock.isA(String.class),
88+
EasyMock.isA(Map.class),
89+
EasyMock.isNull(),
90+
EasyMock.isA(RequestContext.class),
91+
EasyMock.isA(ServiceBundle.class)))
92+
.andReturn(INSTANCE_DISCOVERY_RESPONSE);
93+
94+
PowerMock.replay(HttpHelper.class);
95+
8296
replace(method(OAuthHttpRequest.class, "send")).
8397
with(new InvocationHandler() {
8498
@Override
@@ -176,24 +190,8 @@ public void oAuthRequest_for_acquireTokenByUserAssertion() throws Exception {
176190
Assert.assertEquals(CLIENT_INFO_VALUE, queryParams.get("client_info"));
177191
}
178192

179-
@SuppressWarnings("unchecked")
180193
@Test
181-
public void oAuthRequest_for_acquireTokenByAsymmetricKeyCredential() throws Exception {
182-
PowerMock.mockStatic(HttpHelper.class);
183-
184-
EasyMock.expect(
185-
HttpHelper.executeHttpRequest(
186-
EasyMock.isA(Logger.class),
187-
EasyMock.isA(HttpMethod.class),
188-
EasyMock.isA(String.class),
189-
EasyMock.isA(Map.class),
190-
EasyMock.isNull(),
191-
EasyMock.isA(RequestContext.class),
192-
EasyMock.isA(ServiceBundle.class)))
193-
.andReturn(INSTANCE_DISCOVERY_RESPONSE);
194-
195-
196-
PowerMock.replay(HttpHelper.class);
194+
public void oAuthRequest_for_acquireTokenByClientCertificate() throws Exception {
197195

198196
try {
199197
final KeyStore keystore = KeyStore.getInstance("PKCS12", "SunJSSE");
@@ -245,7 +243,7 @@ public void oAuthRequest_for_acquireTokenByAsymmetricKeyCredential() throws Exce
245243

246244
@Test
247245
public void oAuthRequest_for_acquireTokenByClientAssertion() throws Exception {
248-
//String rsaJwt = getRSAjwt();
246+
249247
try {
250248
final KeyStore keystore = KeyStore.getInstance("PKCS12", "SunJSSE");
251249
keystore.load(

src/test/java/com/microsoft/aad/msal4j/PublicClientApplicationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
@PowerMockIgnore({"javax.net.ssl.*"})
2020
@Test(groups = { "checkin" })
2121
@PrepareForTest({ PublicClientApplication.class,
22-
AsymmetricKeyCredential.class, UserDiscoveryRequest.class})
22+
ClientCertificate.class, UserDiscoveryRequest.class})
2323
public class PublicClientApplicationTest extends PowerMockTestCase {
2424

2525
private PublicClientApplication app = null;

0 commit comments

Comments
 (0)