Skip to content

Commit 6fc2c6c

Browse files
committed
Ensure correlation ID is never null
1 parent f638f61 commit 6fc2c6c

File tree

1 file changed

+23
-10
lines changed

1 file changed

+23
-10
lines changed

msal4j-brokers/src/main/java/com/microsoft/aad/msal4jbrokers/MsalRuntimeBroker.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.slf4j.Logger;
1414
import org.slf4j.LoggerFactory;
1515

16+
import java.util.UUID;
1617
import java.util.concurrent.CompletableFuture;
1718
import java.util.concurrent.ExecutionException;
1819

@@ -34,12 +35,13 @@ public class MsalRuntimeBroker implements IBroker {
3435

3536
@Override
3637
public CompletableFuture<IAuthenticationResult> acquireToken(PublicClientApplication application, SilentParameters parameters) {
38+
String correlationID = application.correlationId() == null ? generateCorrelationID() : application.correlationId();
3739
Account accountResult = null;
3840

3941
//If request has an account ID, MSALRuntime likely has data cached for that account that we can retrieve
4042
if (parameters.account() != null) {
4143
try {
42-
accountResult = ((ReadAccountResult) interop.readAccountById(parameters.account().homeAccountId().split("\\.")[0], application.correlationId()).get()).getAccount();
44+
accountResult = ((ReadAccountResult) interop.readAccountById(parameters.account().homeAccountId().split("\\.")[0], correlationID).get()).getAccount();
4345
} catch (InterruptedException | ExecutionException ex) {
4446
throw new MsalClientException(String.format("MSALRuntime async operation interrupted when waiting for result: %s", ex.getMessage()), AuthenticationErrorCode.MSALRUNTIME_INTEROP_ERROR);
4547
}
@@ -62,8 +64,8 @@ public CompletableFuture<IAuthenticationResult> acquireToken(PublicClientApplica
6264
AuthParameters authParameters = authParamsBuilder.build();
6365

6466
if (accountResult == null) {
65-
return interop.signInSilently(authParameters, application.correlationId())
66-
.thenCompose(acctResult -> interop.acquireTokenSilently(authParameters, application.correlationId(), ((AuthResult) acctResult).getAccount()))
67+
return interop.signInSilently(authParameters, correlationID)
68+
.thenCompose(acctResult -> interop.acquireTokenSilently(authParameters, correlationID, ((AuthResult) acctResult).getAccount()))
6769
.thenApply(authResult -> parseBrokerAuthResult(
6870
application.authority(),
6971
((AuthResult) authResult).getIdToken(),
@@ -73,7 +75,7 @@ public CompletableFuture<IAuthenticationResult> acquireToken(PublicClientApplica
7375
((AuthResult) authResult).getAccessTokenExpirationTime(),
7476
((AuthResult) authResult).isPopAuthorization()));
7577
} else {
76-
return interop.acquireTokenSilently(authParameters, application.correlationId(), accountResult)
78+
return interop.acquireTokenSilently(authParameters, correlationID, accountResult)
7779
.thenApply(authResult -> parseBrokerAuthResult(application.authority(),
7880
((AuthResult) authResult).getIdToken(),
7981
((AuthResult) authResult).getAccessToken(),
@@ -89,6 +91,8 @@ public CompletableFuture<IAuthenticationResult> acquireToken(PublicClientApplica
8991

9092
@Override
9193
public CompletableFuture<IAuthenticationResult> acquireToken(PublicClientApplication application, InteractiveRequestParameters parameters) {
94+
String correlationID = application.correlationId() == null ? generateCorrelationID() : application.correlationId();
95+
9296
try {
9397
AuthParameters.AuthParametersBuilder authParamsBuilder = new AuthParameters.
9498
AuthParametersBuilder(application.clientId(),
@@ -106,8 +110,8 @@ public CompletableFuture<IAuthenticationResult> acquireToken(PublicClientApplica
106110

107111
AuthParameters authParameters = authParamsBuilder.build();
108112

109-
return interop.signInInteractively(parameters.windowHandle(), authParameters, application.correlationId(), parameters.loginHint())
110-
.thenCompose(acctResult -> interop.acquireTokenInteractively(parameters.windowHandle(), authParameters, application.correlationId(), ((AuthResult) acctResult).getAccount()))
113+
return interop.signInInteractively(parameters.windowHandle(), authParameters, correlationID, parameters.loginHint())
114+
.thenCompose(acctResult -> interop.acquireTokenInteractively(parameters.windowHandle(), authParameters, correlationID, ((AuthResult) acctResult).getAccount()))
111115
.thenApply(authResult -> parseBrokerAuthResult(
112116
application.authority(),
113117
((AuthResult) authResult).getIdToken(),
@@ -127,6 +131,8 @@ public CompletableFuture<IAuthenticationResult> acquireToken(PublicClientApplica
127131
@Deprecated
128132
@Override
129133
public CompletableFuture<IAuthenticationResult> acquireToken(PublicClientApplication application, UserNamePasswordParameters parameters) {
134+
String correlationID = application.correlationId() == null ? generateCorrelationID() : application.correlationId();
135+
130136
try {
131137
AuthParameters.AuthParametersBuilder authParamsBuilder = new AuthParameters.
132138
AuthParametersBuilder(application.clientId(),
@@ -143,8 +149,8 @@ public CompletableFuture<IAuthenticationResult> acquireToken(PublicClientApplica
143149

144150
AuthParameters authParameters = authParamsBuilder.build();
145151

146-
return interop.signInSilently(authParameters, application.correlationId())
147-
.thenCompose(acctResult -> interop.acquireTokenSilently(authParameters, application.correlationId(), ((AuthResult) acctResult).getAccount()))
152+
return interop.signInSilently(authParameters, correlationID)
153+
.thenCompose(acctResult -> interop.acquireTokenSilently(authParameters, correlationID, ((AuthResult) acctResult).getAccount()))
148154
.thenApply(authResult -> parseBrokerAuthResult(
149155
application.authority(),
150156
((AuthResult) authResult).getIdToken(),
@@ -160,11 +166,13 @@ public CompletableFuture<IAuthenticationResult> acquireToken(PublicClientApplica
160166

161167
@Override
162168
public void removeAccount(PublicClientApplication application, IAccount msalJavaAccount) {
169+
String correlationID = application.correlationId() == null ? generateCorrelationID() : application.correlationId();
170+
163171
try {
164-
Account msalRuntimeAccount = ((ReadAccountResult) interop.readAccountById(msalJavaAccount.homeAccountId().split("\\.")[0], application.correlationId()).get()).getAccount();
172+
Account msalRuntimeAccount = ((ReadAccountResult) interop.readAccountById(msalJavaAccount.homeAccountId().split("\\.")[0], correlationID).get()).getAccount();
165173

166174
if (msalRuntimeAccount != null) {
167-
interop.signOutSilently(application.clientId(), application.correlationId(), msalRuntimeAccount);
175+
interop.signOutSilently(application.clientId(), correlationID, msalRuntimeAccount);
168176
}
169177
} catch (MsalInteropException interopException) {
170178
throw new MsalClientException(interopException.getErrorMessage(), AuthenticationErrorCode.MSALRUNTIME_INTEROP_ERROR);
@@ -233,4 +241,9 @@ public void enableBrokerPIILogging(boolean enablePII) {
233241
throw new MsalClientException(String.format("Error occurred when calling MSALRuntime PII logging API: %s", ex.getMessage()), AuthenticationErrorCode.MSALRUNTIME_INTEROP_ERROR);
234242
}
235243
}
244+
245+
//Generates a random correlation ID, used when a correlation ID was not set at the application level
246+
private String generateCorrelationID() {
247+
return UUID.randomUUID().toString();
248+
}
236249
}

0 commit comments

Comments
 (0)