public async Task <OpenIdConfigurationResponse> SendOpenIdConfigurationRequest(
            OpenIdConfigurationRequestModel requestModel)
        {
            using (var handler = new WebRequestHandler())
            {
                if (requestModel.AllowSelfHostedCertificates)
                {
                    handler.ServerCertificateValidationCallback =
                        (sender, cert, chain, sslPolicyErrors) => true;
                }

                using (var httpClient = new HttpClient(handler))
                {
                    var response = await httpClient.GetAsync(requestModel.OpenIdConfigurationUrl);

                    var responseString = await response.Content.ReadAsStringAsync();

                    var isSucceeded = response.IsSuccessStatusCode;

                    var responseModel = isSucceeded
                        ? JsonConvert.DeserializeObject <OpenIdConfigurationResponseModel>(responseString)
                        : null;

                    return(new OpenIdConfigurationResponse
                    {
                        Model = responseModel,
                        JsonString = responseString,
                        IsSucceeded = isSucceeded
                    });
                }
            }
        }
        private async Task <(string audience, string siAuthorizationEndpoint)> ProcessOpenIdConfiguration(
            string openIdConfigurationUrl)
        {
            var emptyResult = ("", "");

            if (!string.IsNullOrEmpty(Result.ErrorMessage))
            {
                return(emptyResult);
            }

            if (string.IsNullOrEmpty(_correlationId) ||
                string.IsNullOrEmpty(openIdConfigurationUrl))
            {
                return(emptyResult);
            }

            var openIdConfigurationRequestModel = new OpenIdConfigurationRequestModel
            {
                OpenIdConfigurationUrl = openIdConfigurationUrl
            };

            var openIdConfigurationResponse =
                await Client.SendOpenIdConfigurationRequest(openIdConfigurationRequestModel);

            if (openIdConfigurationResponse == null)
            {
                Result.ErrorMessage = "OpenId Configuration Response is null";
                return(emptyResult);
            }

            Result.OpenIdConfigurationResponse = openIdConfigurationResponse;

            if (!openIdConfigurationResponse.IsSucceeded)
            {
                Result.ErrorMessage = "OpenId Configuration Response StatusCode is not success";
                return(emptyResult);
            }

            if (!TryGetAudience(openIdConfigurationResponse, out var audience))
            {
                return(emptyResult);
            }

            if (!TryGetSiAuthorizationEndpoint(openIdConfigurationResponse, out var siAuthorizationEndpoint))
            {
                return(emptyResult);
            }

            return(audience, siAuthorizationEndpoint);
        }