Skip to content

Commit 4b0b6cd

Browse files
authored
Fall back to local cache if broker fails to return result for silent token call (#4395)
* Update SilentRequest.cs * Fix failing unit tests
1 parent 4b1c58a commit 4b0b6cd

File tree

3 files changed

+10
-28
lines changed

3 files changed

+10
-28
lines changed

src/client/Microsoft.Identity.Client/Internal/Requests/Silent/SilentRequest.cs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,20 +66,12 @@ protected override async Task<AuthenticationResult> ExecuteAsync(CancellationTok
6666
_logger.Info("Broker is configured and enabled, attempting to use broker instead.");
6767
var brokerResult = await _brokerStrategyLazy.Value.ExecuteAsync(cancellationToken).ConfigureAwait(false);
6868

69+
// fallback to local cache if broker fails
6970
if (brokerResult != null)
7071
{
7172
_logger.Verbose(() => "Broker responded to silent request.");
7273
return brokerResult;
7374
}
74-
else
75-
{
76-
_logger.Verbose(() => "Broker could not satisfy the silent request.");
77-
throw new MsalUiRequiredException(
78-
MsalError.FailedToAcquireTokenSilentlyFromBroker,
79-
"Broker could not satisfy the silent request.",
80-
null,
81-
UiRequiredExceptionClassification.AcquireTokenSilentFailed);
82-
}
8375
}
8476

8577
_logger.Verbose(() => "Attempting to acquire token using local cache.");

tests/Microsoft.Identity.Test.Unit/BrokerTests/BrokerRequestTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,7 @@ public async Task NullBroker_AcquireSilentInteractive_Async()
526526
}
527527
catch (MsalUiRequiredException e)
528528
{
529-
Assert.AreEqual("failed_to_acquire_token_silently_from_broker", e.ErrorCode);
529+
Assert.AreEqual("no_tokens_found", e.ErrorCode);
530530

531531
harness.HttpManager.AddInstanceDiscoveryMockHandler();
532532
harness.HttpManager.AddSuccessTokenResponseMockHandlerForPost();

tests/Microsoft.Identity.Test.Unit/RequestsTests/SilentRequestTests.cs

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -130,25 +130,15 @@ public async Task BrokerSilentRequestLocalCacheTestAsync(bool brokerConfiguredBy
130130

131131
var request = new SilentRequest(harness.ServiceBundle, parameters, silentParameters);
132132

133-
if (brokerConfiguredByUser) //When broker is enabled, local cache should not be used
134-
{
135-
var exception = await AssertException.TaskThrowsAsync<MsalUiRequiredException>(() =>
136-
request.RunAsync(default)
137-
,false
138-
).ConfigureAwait(false);
139-
140-
Assert.IsNotNull(exception);
141-
Assert.AreEqual(MsalError.FailedToAcquireTokenSilentlyFromBroker, exception.ErrorCode);
142-
Assert.AreEqual("Broker could not satisfy the silent request.", exception.Message);
143-
}
144-
else
145-
{
146-
var result = await request.RunAsync(default).ConfigureAwait(false);
133+
var result = await request.RunAsync(default).ConfigureAwait(false);
147134

148-
Assert.IsNotNull(result);
149-
Assert.IsNotNull(result.AccessToken);
150-
Assert.AreEqual(TestConstants.s_scope.AsSingleString(), result.Scopes.AsSingleString());
151-
Assert.AreEqual(brokerID, result.Account.Username);
135+
// even if broker is configured by user but not installed, the result will be from the local cache
136+
Assert.IsNotNull(result);
137+
Assert.IsNotNull(result.AccessToken);
138+
Assert.AreEqual(TestConstants.s_scope.AsSingleString(), result.Scopes.AsSingleString());
139+
Assert.AreEqual(brokerID, result.Account.Username);
140+
if (!brokerConfiguredByUser)
141+
{
152142
await mockBroker.DidNotReceiveWithAnyArgs().AcquireTokenSilentAsync(null, null).ConfigureAwait(false);
153143
}
154144
}

0 commit comments

Comments
 (0)