public static async Task <WsTrustResponse> SendRequestAsync(WsTrustAddress wsTrustAddress, UserCredential credential, CallState callState, string cloudAudience) { IHttpClient request = PlatformPlugin.HttpClientFactory.Create(wsTrustAddress.Uri.AbsoluteUri, callState); request.ContentType = "application/soap+xml"; if (credential.UserAuthType == UserAuthType.IntegratedAuth) { SetKerberosOption(request); } if (string.IsNullOrEmpty(cloudAudience)) { cloudAudience = defaultAppliesTo; } StringBuilder messageBuilder = BuildMessage(cloudAudience, wsTrustAddress, credential); string soapAction = XmlNamespace.Issue.ToString(); if (wsTrustAddress.Version == WsTrustVersion.WsTrust2005) { soapAction = XmlNamespace.Issue2005.ToString(); } WsTrustResponse wstResponse; try { request.BodyParameters = new StringRequestParameters(messageBuilder); request.Headers["SOAPAction"] = soapAction; IHttpWebResponse response = await request.GetResponseAsync().ConfigureAwait(false); wstResponse = WsTrustResponse.CreateFromResponse(EncodingHelper.GenerateStreamFromString(response.ResponseString), wsTrustAddress.Version); } catch (HttpRequestWrapperException ex) { string errorMessage; try { using (Stream stream = EncodingHelper.GenerateStreamFromString(ex.WebResponse.ResponseString)) { XDocument responseDocument = WsTrustResponse.ReadDocumentFromResponse(stream); errorMessage = WsTrustResponse.ReadErrorResponse(responseDocument, callState); } } catch (AdalException) { errorMessage = "See inner exception for detail."; } throw new AdalServiceException( AdalError.FederatedServiceReturnedError, string.Format(AdalErrorMessage.FederatedServiceReturnedErrorTemplate, wsTrustAddress.Uri, errorMessage), null, ex); } return(wstResponse); }
public static TokenResponse CreateFromErrorResponse(IHttpWebResponse webResponse) { if (webResponse == null) { return(new TokenResponse { Error = AdalError.ServiceReturnedError, ErrorDescription = AdalErrorMessage.ServiceReturnedError }); } StringBuilder responseStreamString = new StringBuilder(); TokenResponse tokenResponse = null; using (Stream responseStream = EncodingHelper.GenerateStreamFromString(webResponse.ResponseString)) { if (responseStream == null) { return(new TokenResponse { Error = AdalError.Unknown, ErrorDescription = AdalErrorMessage.Unknown }); } try { responseStreamString.Append(ReadStreamContent(responseStream)); using (MemoryStream ms = new MemoryStream(responseStreamString.ToByteArray())) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(TokenResponse)); tokenResponse = ((TokenResponse)serializer.ReadObject(ms)); } } catch (SerializationException) { tokenResponse = new TokenResponse { Error = (webResponse.StatusCode == HttpStatusCode.ServiceUnavailable) ? AdalError.ServiceUnavailable : AdalError.Unknown, ErrorDescription = responseStreamString.ToString() }; } } return(tokenResponse); }
internal static async Task <XDocument> FetchMexAsync(string federationMetadataUrl, CallState callState) { XDocument mexDocument; try { IHttpClient request = new HttpClientWrapper(federationMetadataUrl, callState); using (var response = await request.GetResponseAsync().ConfigureAwait(false)) { mexDocument = XDocument.Load(EncodingHelper.GenerateStreamFromString(response.ResponseString), LoadOptions.None); } } catch (HttpRequestWrapperException ex) { throw new AdalServiceException(AdalError.AccessingWsMetadataExchangeFailed, ex); } catch (XmlException ex) { throw new AdalException(AdalError.ParsingWsMetadataExchangeFailed, ex); } return(mexDocument); }