public async Task <Uri> ListenToSingleRequestAndRespondAsync( int port, Func <Uri, string> responseProducer, CancellationToken cancellationToken) { TcpListener tcpListener = null; TcpClient tcpClient = null; try { _logger.Verbose("TcpInterceptor: Starting to listen on localhost on port " + port); tcpListener = new TcpListener(IPAddress.Loopback, port); tcpClient = await AcceptTcpClientAsync(tcpListener, cancellationToken) .ConfigureAwait(false); _logger.Verbose("TcpInterceptor: The socket received a message"); return(await ExtractUriAndRespondAsync(tcpClient, responseProducer, cancellationToken) .ConfigureAwait(false)); } finally { tcpListener.Stop(); #if DESKTOP || NET_CORE tcpClient?.Close(); #else tcpClient?.Dispose(); #endif } }
public static bool ContinueAuthentication(string url, Core.ICoreLogger logger) { if (s_returnedUriReady == null) { bool containsBrokerSubString = url.Contains(iOSBrokerConstants.IdentifyiOSBrokerFromResponseUrl); logger?.Warning( "Not expecting navigation to come back to WebviewBase. " + "This can indicate a badly setup OpenUrl hook " + "where SetBrokerContinuationEventArgs is not called."); logger?.WarningPii( $"Url: {url} is broker url? {containsBrokerSubString}", $"Is broker url? {containsBrokerSubString}"); return(false); } s_authorizationResult = AuthorizationResult.FromUri(url); logger?.Verbose("Response url parsed and the result is " + s_authorizationResult.Status); s_returnedUriReady.Release(); return(true); }
private async Task <MsalTokenResponse> SendHttpAndClearTelemetryAsync(string tokenEndpoint, Core.ICoreLogger logger) { UriBuilder builder = new UriBuilder(tokenEndpoint); builder.AppendQueryParameters(_requestParams.ExtraQueryParameters); Uri tokenEndpointWithQueryParams = builder.Uri; try { logger.Verbose("[Token Client] Fetching MsalTokenResponse .... "); MsalTokenResponse msalTokenResponse = await _oAuth2Client .GetTokenAsync(tokenEndpointWithQueryParams, _requestParams.RequestContext, true, _requestParams.OnBeforeTokenRequestHandler) .ConfigureAwait(false); // Clear failed telemetry data as we've just sent it _serviceBundle.HttpTelemetryManager.ResetPreviousUnsentData(); return(msalTokenResponse); } catch (MsalServiceException ex) { if (!ex.IsAadUnavailable()) { // Clear failed telemetry data as we've just sent it ... // even if we received an error from the server, // telemetry would have been recorded _serviceBundle.HttpTelemetryManager.ResetPreviousUnsentData(); } if (ex.StatusCode == (int)HttpStatusCode.Unauthorized) { string responseHeader = string.Empty; var isChallenge = _serviceBundle.DeviceAuthManager.TryCreateDeviceAuthChallengeResponse( ex.Headers, new Uri(tokenEndpoint), // do not add query params to PKeyAuth https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/issues/2359 out responseHeader); if (isChallenge) { //Injecting PKeyAuth response here and replaying request to attempt device auth _oAuth2Client.AddHeader("Authorization", responseHeader); return(await _oAuth2Client.GetTokenAsync( tokenEndpointWithQueryParams, _requestParams.RequestContext, false, _requestParams.OnBeforeTokenRequestHandler).ConfigureAwait(false)); } } throw; } finally { _requestInProgress = false; } }