/// <summary> /// Gets a response from the IdP based on a message. /// </summary> /// <param name="endpoint">The IdP endpoint.</param> /// <param name="message">The message.</param> /// <param name="basicAuth">Basic auth settings.</param> /// <returns></returns> public Stream GetResponse(string endpoint, string message, HttpBasicAuthElement basicAuth) { Binding binding = CreateSslBinding(); Message request = Message.CreateMessage(binding.MessageVersion, HttpArtifactBindingConstants.SOAPAction, new SimpleBodyWriter(message)); request.Headers.To = new Uri(endpoint); HttpRequestMessageProperty property = new HttpRequestMessageProperty(); property.Method = "POST"; property.Headers.Add(HttpRequestHeader.ContentType, "text/xml; charset=utf-8"); //We are using Basic http auth over ssl if (basicAuth != null && basicAuth.Enabled) { string basicAuthzHeader = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(basicAuth.Username + ":" + basicAuth.Password)); property.Headers.Add(HttpRequestHeader.Authorization, basicAuthzHeader); } request.Properties.Add(HttpRequestMessageProperty.Name, property); if (_context.Request.Params["relayState"] != null) { request.Properties.Add("relayState", _context.Request.Params["relayState"]); } EndpointAddress epa = new EndpointAddress(endpoint); ChannelFactory <IRequestChannel> factory = new ChannelFactory <IRequestChannel>(binding, epa); IRequestChannel reqChannel = factory.CreateChannel(); reqChannel.Open(); Message response = reqChannel.Request(request); Console.WriteLine(response); reqChannel.Close(); XmlDocument xDoc = new XmlDocument(); xDoc.XmlResolver = null; xDoc.PreserveWhitespace = true; xDoc.Load(response.GetReaderAtBodyContents()); string outerXml = xDoc.DocumentElement.OuterXml; MemoryStream memStream = new MemoryStream(Encoding.UTF8.GetBytes(outerXml)); return(memStream); }
/// <summary> /// Gets a response from the IdP based on a message. /// </summary> /// <param name="endpoint">The IdP endpoint.</param> /// <param name="message">The message.</param> /// <param name="basicAuth">Basic auth settings.</param> /// <returns></returns> public Stream GetResponse(string endpoint, string message, HttpBasicAuthElement basicAuth) { Binding binding = CreateSslBinding(); Message request = Message.CreateMessage(binding.MessageVersion, HttpArtifactBindingConstants.SOAPAction, new SimpleBodyWriter(message)); request.Headers.To = new Uri(endpoint); HttpRequestMessageProperty property = new HttpRequestMessageProperty(); property.Method = "POST"; property.Headers.Add(HttpRequestHeader.ContentType, "text/xml; charset=utf-8"); //We are using Basic http auth over ssl if (basicAuth != null && basicAuth.Enabled) { string basicAuthzHeader = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(basicAuth.Username + ":" + basicAuth.Password)); property.Headers.Add(HttpRequestHeader.Authorization, basicAuthzHeader); } request.Properties.Add( HttpRequestMessageProperty.Name, property ); if (_context.Request.Params["relayState"] != null) request.Properties.Add("relayState", _context.Request.Params["relayState"]); EndpointAddress epa = new EndpointAddress(endpoint); ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(binding, epa); IRequestChannel reqChannel = factory.CreateChannel(); reqChannel.Open(); Message response = reqChannel.Request(request); Console.WriteLine(response); reqChannel.Close(); XmlDocument xDoc = new XmlDocument(); xDoc.Load(response.GetReaderAtBodyContents()); string outerXml = xDoc.DocumentElement.OuterXml; MemoryStream memStream = new MemoryStream(Encoding.UTF8.GetBytes(outerXml)); return memStream; }