private async Task <MsalTokenResponse> AcquireTokenSilentViaBrokerAsync(BrokerRequest brokerRequest) { // Don't send silent background request if account information is not provided using (_logger.LogMethodDuration()) { _logger.Verbose("User is specified for silent token request. Starting silent Android broker request. "); string silentResult = await _brokerHelper.GetBrokerAuthTokenSilentlyAsync(brokerRequest, _parentActivity).ConfigureAwait(false); if (!string.IsNullOrEmpty(silentResult)) { return(MsalTokenResponse.CreateFromAndroidBrokerResponse(silentResult, brokerRequest.CorrelationId)); } return(new MsalTokenResponse { Error = MsalError.BrokerResponseReturnedError, ErrorDescription = "Unknown Android broker error. Failed to acquire token silently from the broker. " + MsalErrorMessage.AndroidBrokerCannotBeInvoked, }); } }
private async Task AcquireTokenInternalAsync(IDictionary <string, string> brokerPayload) { try { if (brokerPayload.ContainsKey(BrokerParameter.BrokerInstallUrl)) { _logger.Info("Android Broker - broker payload contains install url"); var appLink = AndroidBrokerHelper.GetValueFromBrokerPayload(brokerPayload, BrokerParameter.BrokerInstallUrl); _logger.Info("Android Broker - Starting ActionView activity to " + appLink); _activity.StartActivity(new Intent(Intent.ActionView, AndroidNative.Net.Uri.Parse(appLink))); throw new MsalClientException( MsalError.BrokerApplicationRequired, MsalErrorMessage.BrokerApplicationRequired); } await _brokerHelper.InitiateBrokerHandshakeAsync(_activity).ConfigureAwait(false); brokerPayload[BrokerParameter.BrokerAccountName] = AndroidBrokerHelper.GetValueFromBrokerPayload(brokerPayload, BrokerParameter.Username); // Don't send silent background request if account information is not provided if (brokerPayload.ContainsKey(BrokerParameter.IsSilentBrokerRequest)) { _logger.Verbose("User is specified for silent token request. Starting silent broker request."); string silentResult = await _brokerHelper.GetBrokerAuthTokenSilentlyAsync(brokerPayload, _activity).ConfigureAwait(false); if (!string.IsNullOrEmpty(silentResult)) { s_androidBrokerTokenResponse = MsalTokenResponse.CreateFromAndroidBrokerResponse(silentResult, s_correlationId); } else { s_androidBrokerTokenResponse = new MsalTokenResponse { Error = MsalError.BrokerResponseReturnedError, ErrorDescription = "Failed to acquire token silently from the broker." + MsalErrorMessage.AndroidBrokerCannotBeInvoked, }; } return; } else { _logger.Verbose("User is not specified for silent token request"); } _logger.Verbose("Starting Android Broker interactive authentication"); // onActivityResult will receive the response for this activity. // Lauching this activity will switch to the broker app. Intent brokerIntent = await _brokerHelper .GetIntentForInteractiveBrokerRequestAsync(brokerPayload, _activity) .ConfigureAwait(false); if (brokerIntent != null) { try { _logger.Info( "Calling activity pid:" + AndroidNative.OS.Process.MyPid() + " tid:" + AndroidNative.OS.Process.MyTid() + "uid:" + AndroidNative.OS.Process.MyUid()); _activity.StartActivityForResult(brokerIntent, 1001); } catch (ActivityNotFoundException e) { _logger.ErrorPiiWithPrefix(e, "Unable to get android activity during interactive broker request"); throw; } } } catch (Exception ex) { _logger.ErrorPiiWithPrefix(ex, "Broker invocation failed."); throw; } await s_readyForResponse.WaitAsync().ConfigureAwait(false); }