Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 public TcpInterceptor(Core.ICoreLogger logger)
 {
     _logger = logger;
 }
Esempio n. 3
0
        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;
            }
        }