Skip to content
This repository was archived by the owner on Mar 16, 2021. It is now read-only.

Commit dbd0196

Browse files
author
Nakul Sabharwal
committed
Implemented msgraph-sdk-java's IAuthProvider interface. Migrated core authenticate request to okhttp.
1 parent 2ffcbee commit dbd0196

File tree

7 files changed

+109
-76
lines changed

7 files changed

+109
-76
lines changed

build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@ dependencies {
2020
implementation 'com.google.guava:guava:23.0'
2121
// Use JUnit and mockito test framework
2222
testImplementation 'junit:junit:4.12'
23-
compile 'org.mockito:mockito-core:2.9.0'
23+
testImplementation 'org.mockito:mockito-core:2.9.0'
2424
compile 'org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.2'
2525
compile 'com.microsoft.graph:microsoft-graph-core:0.1.0-SNAPSHOT'
26+
compile 'com.microsoft.graph:microsoft-graph:1.1.0'
2627
}
2728

2829
def pomConfig = {

src/main/java/com/microsoft/graph/auth/confidentialClient/AuthorizationCodeProvider.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.util.List;
44

5-
import org.apache.http.HttpRequest;
65
import org.apache.oltu.oauth2.client.OAuthClient;
76
import org.apache.oltu.oauth2.client.URLConnectionClient;
87
import org.apache.oltu.oauth2.client.request.OAuthClientRequest;
@@ -14,10 +13,14 @@
1413
import com.microsoft.graph.auth.AuthConstants;
1514
import com.microsoft.graph.auth.BaseAuthentication;
1615
import com.microsoft.graph.auth.enums.NationalCloud;
17-
import com.microsoft.graph.httpcore.IAuthenticationProvider;
16+
import com.microsoft.graph.authentication.IAuthenticationProvider;
17+
import com.microsoft.graph.http.IHttpRequest;
18+
import com.microsoft.graph.httpcore.ICoreAuthenticationProvider;
1819

20+
import okhttp3.Request;
1921

20-
public class AuthorizationCodeProvider extends BaseAuthentication implements IAuthenticationProvider{
22+
23+
public class AuthorizationCodeProvider extends BaseAuthentication implements IAuthenticationProvider, ICoreAuthenticationProvider{
2124

2225
/*
2326
* Authorization code provider initialization
@@ -68,7 +71,13 @@ public AuthorizationCodeProvider(
6871
}
6972

7073
@Override
71-
public void authenticateRequest(HttpRequest request) {
74+
public Request authenticateRequest(Request request) {
75+
String tokenParameter = AuthConstants.BEARER + getAccessTokenSilent();
76+
return request.newBuilder().addHeader(AuthConstants.AUTHORIZATION_HEADER, tokenParameter).build();
77+
}
78+
79+
@Override
80+
public void authenticateRequest(IHttpRequest request) {
7281
String tokenParameter = AuthConstants.BEARER + getAccessTokenSilent();
7382
request.addHeader(AuthConstants.AUTHORIZATION_HEADER, tokenParameter);
7483
}

src/main/java/com/microsoft/graph/auth/confidentialClient/ClientCredentialProvider.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.util.List;
44

5-
import org.apache.http.HttpRequest;
65
import org.apache.oltu.oauth2.client.OAuthClient;
76
import org.apache.oltu.oauth2.client.URLConnectionClient;
87
import org.apache.oltu.oauth2.client.request.OAuthClientRequest;
@@ -14,9 +13,13 @@
1413
import com.microsoft.graph.auth.AuthConstants;
1514
import com.microsoft.graph.auth.BaseAuthentication;
1615
import com.microsoft.graph.auth.enums.NationalCloud;
17-
import com.microsoft.graph.httpcore.IAuthenticationProvider;
16+
import com.microsoft.graph.authentication.IAuthenticationProvider;
17+
import com.microsoft.graph.http.IHttpRequest;
18+
import com.microsoft.graph.httpcore.ICoreAuthenticationProvider;
1819

19-
public class ClientCredentialProvider extends BaseAuthentication implements IAuthenticationProvider{
20+
import okhttp3.Request;
21+
22+
public class ClientCredentialProvider extends BaseAuthentication implements IAuthenticationProvider, ICoreAuthenticationProvider{
2023

2124
/*
2225
* Client credential provider instance using client secret
@@ -42,20 +45,31 @@ public ClientCredentialProvider(String clientId,
4245
}
4346

4447
@Override
45-
public void authenticateRequest(HttpRequest request) {
48+
public void authenticateRequest(IHttpRequest request) {
49+
String accessToken = getAcccessToken();
50+
request.addHeader(AuthConstants.AUTHORIZATION_HEADER, AuthConstants.BEARER + accessToken);
51+
}
52+
53+
@Override
54+
public Request authenticateRequest(Request request) {
55+
String accessToken = getAcccessToken();
56+
return request.newBuilder().addHeader(AuthConstants.AUTHORIZATION_HEADER, AuthConstants.BEARER + accessToken).build();
57+
}
58+
59+
String getAcccessToken() {
60+
String accessToken = "";
4661
try {
47-
String accessToken = null;
4862
long duration = System.currentTimeMillis() - getStartTime();
4963
if(getResponse()!=null && duration>0 && duration< getResponse().getExpiresIn()*1000) {
5064
accessToken = getResponse().getAccessToken();
5165
} else {
5266
OAuthClientRequest authRequest = getTokenRequestMessage();
5367
accessToken = getAccessTokenNewRequest(authRequest);
5468
}
55-
request.addHeader(AuthConstants.AUTHORIZATION_HEADER, AuthConstants.BEARER + accessToken);
5669
} catch (Exception e) {
5770
e.printStackTrace();
5871
}
72+
return accessToken;
5973
}
6074

6175
/*

src/main/java/com/microsoft/graph/auth/publicClient/UsernamePasswordProvider.java

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.util.List;
44

5-
import org.apache.http.HttpRequest;
65
import org.apache.oltu.oauth2.client.OAuthClient;
76
import org.apache.oltu.oauth2.client.URLConnectionClient;
87
import org.apache.oltu.oauth2.client.request.OAuthClientRequest;
@@ -14,9 +13,13 @@
1413
import com.microsoft.graph.auth.AuthConstants;
1514
import com.microsoft.graph.auth.BaseAuthentication;
1615
import com.microsoft.graph.auth.enums.NationalCloud;
17-
import com.microsoft.graph.httpcore.IAuthenticationProvider;
16+
import com.microsoft.graph.authentication.IAuthenticationProvider;
17+
import com.microsoft.graph.http.IHttpRequest;
18+
import com.microsoft.graph.httpcore.ICoreAuthenticationProvider;
1819

19-
public class UsernamePasswordProvider extends BaseAuthentication implements IAuthenticationProvider{
20+
import okhttp3.Request;
21+
22+
public class UsernamePasswordProvider extends BaseAuthentication implements IAuthenticationProvider, ICoreAuthenticationProvider{
2023

2124
private String Username;
2225
private String Password;
@@ -40,16 +43,27 @@ public UsernamePasswordProvider(
4043
super( scopes,
4144
clientId,
4245
GetAuthority(nationalCloud == null? NationalCloud.Global: nationalCloud, tenant == null? AuthConstants.Tenants.Organizations: tenant),
43-
null,
46+
null,
4447
nationalCloud == null? NationalCloud.Global: nationalCloud,
45-
tenant,
48+
tenant == null? AuthConstants.Tenants.Organizations: tenant,
4649
clientSecret);
4750
this.Username = username;
4851
this.Password = password;
4952
}
53+
54+
@Override
55+
public Request authenticateRequest(Request request) {
56+
String accessToken = getAccessToken();
57+
return request.newBuilder().addHeader("Authorization", AuthConstants.BEARER + accessToken).build();
58+
}
5059

5160
@Override
52-
public void authenticateRequest(HttpRequest request) {
61+
public void authenticateRequest(IHttpRequest request) {
62+
String accessToken = getAccessToken();
63+
request.addHeader("Authorization", AuthConstants.BEARER + accessToken);
64+
}
65+
66+
String getAccessToken() {
5367
String accessToken = getAccessTokenSilent();
5468
if(accessToken == null) {
5569
try {
@@ -59,7 +73,7 @@ public void authenticateRequest(HttpRequest request) {
5973
e.printStackTrace();
6074
}
6175
}
62-
request.addHeader("Authorization", AuthConstants.BEARER + accessToken);
76+
return accessToken;
6377
}
6478

6579
OAuthClientRequest getTokenRequestMessage() throws OAuthSystemException {

src/test/java/com/microsoft/graph/auth/confidentialClient/AuthorizationCodeProviderTests.java

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import java.util.Arrays;
77
import java.util.List;
88

9-
import org.apache.http.client.methods.HttpGet;
109
import org.apache.oltu.oauth2.client.request.OAuthClientRequest;
1110
import org.apache.oltu.oauth2.common.exception.OAuthProblemException;
1211
import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
@@ -19,24 +18,27 @@
1918
import com.microsoft.graph.auth.AuthConstants;
2019
import com.microsoft.graph.auth.enums.NationalCloud;
2120

21+
import okhttp3.Request;
22+
2223
@Ignore
2324
@RunWith(MockitoJUnitRunner.class)
2425
public class AuthorizationCodeProviderTests {
25-
26+
2627
private String CLIENT_ID = "CLIENT_ID";
2728
private String REDIRECT_URL = "http://localhost";
2829
private String SECRET = "CLIENT_SECRET";
2930
private List<String> SCOPES = Arrays.asList("user.read", "openid", "profile", "offline_access");
3031
private String AUTHORIZATION_CODE = "AUTHORIZATION_CODE";
3132
private NationalCloud NATIONAL_CLOUD = NationalCloud.Global;
3233
private String TENANT = AuthConstants.Tenants.Common;
33-
34+
private String testmeurl = "https://graph.microsoft.com/v1.0/me/";
35+
3436
@Test
3537
public void getAuthorizationCodeProviderTest() {
3638
AuthorizationCodeProvider authorizationCodeProvider = new AuthorizationCodeProvider(CLIENT_ID, SCOPES, AUTHORIZATION_CODE, REDIRECT_URL, SECRET);
3739
assertNotNull(authorizationCodeProvider);
3840
}
39-
41+
4042
@Test
4143
public void getAuthorizationCodeProviderWithNationalCloudTenantTest() {
4244
AuthorizationCodeProvider authorizationCodeProvider = new AuthorizationCodeProvider(CLIENT_ID, SCOPES, AUTHORIZATION_CODE, REDIRECT_URL, NATIONAL_CLOUD, TENANT, SECRET);
@@ -50,32 +52,32 @@ public void getTokenRequestMessageTest() throws OAuthSystemException {
5052
OAuthClientRequest request = authorizationCodeProvider.getTokenRequestMessage(AUTHORIZATION_CODE);
5153
assertEquals(expected, request.getBody().toString());
5254
}
53-
55+
5456
@Test
5557
public void authenticateRequestTest() throws OAuthSystemException, OAuthProblemException {
5658
AuthorizationCodeProvider authorizationCodeProvider = Mockito.mock(AuthorizationCodeProvider.class);
5759
Mockito.when(authorizationCodeProvider.getTokenRequestMessage(AUTHORIZATION_CODE)).thenReturn(Mockito.mock(OAuthClientRequest.class));
58-
HttpGet httpget = new HttpGet("https://graph.microsoft.com/v1.0/me/");
60+
Request httpget = new Request.Builder().url(testmeurl).build();
5961
authorizationCodeProvider.authenticateRequest(httpget);
60-
String actual = httpget.getFirstHeader("Authorization").getValue();
62+
String actual = httpget.header("Authorization");
6163
assertEquals("Bearer test_accessToken" , actual);
6264
}
63-
65+
6466
@Test
6567
public void getAccessTokenNewRequestTest() throws OAuthSystemException, OAuthProblemException {
6668
AuthorizationCodeProvider authorizationCodeProvider = new AuthorizationCodeProvider(CLIENT_ID, SCOPES, AUTHORIZATION_CODE, REDIRECT_URL, SECRET);
67-
HttpGet httpget = new HttpGet("https://graph.microsoft.com/v1.0/me/");
69+
Request httpget = new Request.Builder().url(testmeurl).build();
6870
authorizationCodeProvider.authenticateRequest(httpget);
69-
String actualTokenparameter = httpget.getFirstHeader("Authorization").getValue();
71+
String actualTokenparameter = httpget.header("Authorization");
7072
assertNotNull(actualTokenparameter);
7173
}
72-
74+
7375
@Test
7476
public void getAccessTokenNewRequestWithNationalCloudTenantTest() throws OAuthSystemException, OAuthProblemException {
7577
AuthorizationCodeProvider authorizationCodeProvider = new AuthorizationCodeProvider(CLIENT_ID, SCOPES, AUTHORIZATION_CODE, REDIRECT_URL, NATIONAL_CLOUD, TENANT, SECRET);
76-
HttpGet httpget = new HttpGet("https://graph.microsoft.com/v1.0/me/");
78+
Request httpget = new Request.Builder().url(testmeurl).build();
7779
authorizationCodeProvider.authenticateRequest(httpget);
78-
String actualTokenparameter = httpget.getFirstHeader("Authorization").getValue();
80+
String actualTokenparameter = httpget.header("Authorization");
7981
assertNotNull(actualTokenparameter);
8082
}
8183

src/test/java/com/microsoft/graph/auth/confidentialClient/ClientCredentialProviderTests.java

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,20 @@
77
import java.util.Arrays;
88
import java.util.List;
99

10-
import org.apache.http.HttpResponse;
11-
import org.apache.http.client.ClientProtocolException;
12-
import org.apache.http.client.methods.HttpGet;
13-
import org.apache.http.client.protocol.HttpClientContext;
14-
import org.apache.http.impl.client.CloseableHttpClient;
15-
import org.apache.http.util.EntityUtils;
1610
import org.apache.oltu.oauth2.client.request.OAuthClientRequest;
1711
import org.apache.oltu.oauth2.common.exception.OAuthProblemException;
1812
import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
1913
import org.junit.Ignore;
2014
import org.junit.Test;
2115

2216
import com.microsoft.graph.auth.enums.NationalCloud;
17+
import com.microsoft.graph.authentication.IAuthenticationProvider;
2318
import com.microsoft.graph.httpcore.HttpClients;
24-
import com.microsoft.graph.httpcore.IAuthenticationProvider;
19+
import com.microsoft.graph.httpcore.ICoreAuthenticationProvider;
20+
21+
import okhttp3.OkHttpClient;
22+
import okhttp3.Request;
23+
import okhttp3.Response;
2524

2625
public class ClientCredentialProviderTests {
2726
public static String CLIENT_ID = "CLIENT_ID";
@@ -61,15 +60,13 @@ public void getAccessTokenNewRequestTest() throws OAuthSystemException, OAuthPro
6160

6261
@Ignore
6362
@Test
64-
public void authenticateRequestTest() throws ClientProtocolException, IOException {
65-
IAuthenticationProvider iAuthenticationProvider = new ClientCredentialProvider(CLIENT_ID, SCOPES, CLIENT_SECRET, tenantGUID, NationalCloud.Global);
66-
CloseableHttpClient httpclient = HttpClients.createDefault(iAuthenticationProvider);
67-
HttpGet httpget = new HttpGet("https://graph.microsoft.com/v1.0/groups");
68-
System.out.println("Executing request " + httpget.getRequestLine());
69-
HttpClientContext localContext = HttpClientContext.create();
70-
HttpResponse response = httpclient.execute(httpget, localContext);
63+
public void authenticateRequestTest() throws IOException {
64+
ICoreAuthenticationProvider iCoreAuthenticationProvider = new ClientCredentialProvider(CLIENT_ID, SCOPES, CLIENT_SECRET, tenantGUID, NationalCloud.Global);
65+
OkHttpClient httpclient = HttpClients.createDefault(iCoreAuthenticationProvider);
66+
Request httpget = new Request.Builder().url("https://graph.microsoft.com/v1.0/groups").build();
67+
Response response = httpclient.newCall(httpget).execute();
7168
assertNotNull(response);
72-
assertNotNull(EntityUtils.toString(response.getEntity()));
69+
assertNotNull(response.body().string());
7370
}
7471

7572
}

0 commit comments

Comments
 (0)