コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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;
        }