Skip to content

Commit

Permalink
Authenticate with device code (#33)
Browse files Browse the repository at this point in the history
* authenticate interactively using a device code

* fix browser popup
  • Loading branch information
LizaShak authored and rabee333 committed Oct 11, 2018
1 parent 89f01fa commit d03c72a
Showing 1 changed file with 37 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@
import com.microsoft.aad.adal4j.AuthenticationContext;
import com.microsoft.aad.adal4j.AuthenticationResult;
import com.microsoft.aad.adal4j.ClientCredential;
import com.microsoft.aad.adal4j.DeviceCode;
import com.microsoft.azure.kusto.data.exceptions.DataClientException;
import com.microsoft.azure.kusto.data.exceptions.DataServiceException;

import javax.naming.ServiceUnavailableException;
import java.awt.*;
import java.net.URI;
import java.net.MalformedURLException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
Expand All @@ -16,6 +20,7 @@ class AadAuthenticationHelper {

private final static String DEFAULT_AAD_TENANT = "common";
private final static String CLIENT_ID = "db662dc1-0cfe-4e1c-a843-19a68e65be58";
private final static String RESOURCE = "https://graph.windows.net";

private ClientCredential clientCredential;
private String userUsername;
Expand All @@ -38,6 +43,36 @@ class AadAuthenticationHelper {
aadAuthorityUri = String.format("https://login.microsoftonline.com/%s", aadAuthorityId);
}

AuthenticationResult acquireAccessTokenUsingDeviceCodeFlow() throws Exception {
AuthenticationContext context = null;
AuthenticationResult result = null;
ExecutorService service = null;
try {
service = Executors.newSingleThreadExecutor();
context = new AuthenticationContext( aadAuthorityUri, true, service);

Future<DeviceCode> future = context.acquireDeviceCode(clientCredential.getClientId(), RESOURCE, null);
DeviceCode deviceCode = future.get();
System.out.println(deviceCode.getMessage());
System.out.println("Press Enter after authenticating");
if (Desktop.isDesktopSupported()) {
Desktop.getDesktop().browse(new URI(deviceCode.getVerificationUrl()));
}
System.in.read();
Future<AuthenticationResult> futureResult = context.acquireTokenByDeviceCode(deviceCode, null);
result = futureResult.get();

} finally {
if (service != null) {
service.shutdown();
}
}
if (result == null) {
throw new ServiceUnavailableException("authentication result was null");
}
return result;
}

String acquireAccessToken() throws DataServiceException, DataClientException {
if (clientCredential != null) {
return acquireAadApplicationAccessToken().getAccessToken();
Expand All @@ -51,7 +86,7 @@ private AuthenticationResult acquireAadUserAccessToken() throws DataServiceExcep
AuthenticationResult result;
ExecutorService service = null;
try {
service = Executors.newFixedThreadPool(1);
service = Executors.newSingleThreadExecutor();
context = new AuthenticationContext(aadAuthorityUri, true, service);

Future<AuthenticationResult> future = context.acquireToken(
Expand All @@ -77,7 +112,7 @@ private AuthenticationResult acquireAadApplicationAccessToken() throws DataServi
AuthenticationResult result;
ExecutorService service = null;
try {
service = Executors.newFixedThreadPool(1);
service = Executors.newSingleThreadExecutor();
context = new AuthenticationContext(aadAuthorityUri, true, service);
Future<AuthenticationResult> future = context.acquireToken(clusterUrl, clientCredential, null);
result = future.get();
Expand Down

0 comments on commit d03c72a

Please sign in to comment.