A cloud-based identity and access management service for securing user authentication and resource access
[Bug] Microsoft.Identity.Client.MsalClientException: User canceled authentication. Xamarin forms
Getting issue MSAL Authentication for some users Xamarin Forms.
Original Exception
AuthCodeRequestComponent.VerifyAuthorizationResult (Microsoft.Identity.Client.UI.AuthorizationResult authorizationResult, System.String originalState)
Microsoft.Identity.Client.MsalClientException: User canceled authentication.
I can ensure user has not cancelled the authentication process.
Stack Trace:
icrosoft.Identity.Client.Internal
AuthCodeRequestComponent.VerifyAuthorizationResult (Microsoft.Identity.Client.UI.AuthorizationResult authorizationResult, System.String originalState)
Microsoft.Identity.Client.Internal
AuthCodeRequestComponent.FetchAuthCodeAndPkceInternalAsync (Microsoft.Identity.Client.UI.IWebUI webUi, System.Threading.CancellationToken cancellationToken)
Microsoft.Identity.Client.Internal
AuthCodeRequestComponent.FetchAuthCodeAndPkceVerifierAsync (System.Threading.CancellationToken cancellationToken)
Microsoft.Identity.Client.Internal.Requests
InteractiveRequest.GetTokenResponseAsync (System.Threading.CancellationToken cancellationToken)
Microsoft.Identity.Client.Internal.Requests
InteractiveRequest.ExecuteAsync (System.Threading.CancellationToken cancellationToken)
Microsoft.Identity.Client.Internal.Requests
RequestBase.RunAsync (System.Threading.CancellationToken cancellationToken)
Microsoft.Identity.Client.ApiConfig.Executors
PublicClientExecutor.ExecuteAsync (Microsoft.Identity.Client.ApiConfig.Parameters.AcquireTokenCommonParameters commonParameters, Microsoft.Identity.Client.ApiConfig.Parameters.AcquireTokenInteractiveParameters interactiveParameters, System.Threading.CancellationToken cancellationToken)
Code Snippet:
if (DeviceInfo.Platform == DevicePlatform.iOS)
{
_pca = PublicClientApplicationBuilder.Create(Configurations.ClientID).WithTenantId(Configurations.TenantID)
.WithBroker(false)
.WithRedirectUri(Configurations.IOSRedirectUri)
.WithIosKeychainSecurityGroup(AppConstants.KeyChainSecurityGroup)
.Build();
}
else
{
_pca = PublicClientApplicationBuilder.Create(Configurations.ClientID).WithTenantId(Configurations.TenantID)
.WithBroker(false)
.WithRedirectUri(Configurations.AndroidRedirectUri)
.Build(); }
// Gets the available accounts
var accounts = await _pca.GetAccountsAsync();
// Stores first account available
Common.Account = accounts.FirstOrDefault();
try
{
// This call acquires the access token silently without asking for user credentials
var authResult = await _pca.AcquireTokenSilent(Configurations.Scopes, Common.Account).ExecuteAsync();
// Stores the access token
AppConstants.AccessToken = authResult.AccessToken;
return true;
}
catch (MsalUiRequiredException ex)
{
try
{
// This present a interactive window to user where in user needs to
// enter credentials for acquiring access token
var authResult = await _pca.AcquireTokenInteractive(Configurations.Scopes)
.WithParentActivityOrWindow(App.RootViewController)
.WithUseEmbeddedWebView(true)
.ExecuteAsync();
AppConstants.AccessToken = authResult.AccessToken;
return true;
}
catch (Exception ex2)
{
Crashes.TrackError(ex2);
}
return false;
}
Around 15% of iOS App users facing this issue. Looking for immediate help.
Best Regards
Niladri