public async Task <MsalTokenResponse> AcquireTokenInteractiveAsync( AuthenticationRequestParameters authenticationRequestParameters, AcquireTokenInteractiveParameters acquireTokenInteractiveParameters) { s_androidBrokerTokenResponse = null; BrokerRequest brokerRequest = BrokerRequest.FromInteractiveParameters( authenticationRequestParameters, acquireTokenInteractiveParameters); // There can only be 1 broker request at a time so keep track of the correlation id s_correlationId = brokerRequest.CorrelationId; try { await _brokerHelper.InitiateBrokerHandshakeAsync(_parentActivity).ConfigureAwait(false); // todo: needed? // brokerPayload[BrokerParameter.BrokerAccountName] = AndroidBrokerHelper.GetValueFromBrokerPayload(brokerPayload, BrokerParameter.Username); await AcquireTokenInteractiveViaBrokerAsync(brokerRequest).ConfigureAwait(false); } catch (Exception ex) { _logger.ErrorPiiWithPrefix(ex, "Android broker interactive invocation failed. "); HandleBrokerOperationError(ex); } using (_logger.LogBlockDuration("Waiting for Android broker response. ")) { await s_readyForResponse.WaitAsync().ConfigureAwait(false); return(s_androidBrokerTokenResponse); } }
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); }