Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# Siteminder Authentication

Tags:

c#

siteminder

I am trying to write some code to connect to an HTTPS site that uses Siteminder authentication.

I keep getting a 401. Any ideas?

I have read a few different things on here but none have really seemed all that helpful. I am also using Fiddler/Firefox Tamper to snoop what's going on.

Here is what I've got so far in regards to code:

try
        {

            Uri uri = new Uri("https://websiteaddresshere");
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri) as HttpWebRequest;

            request.Accept = "text/html, application/xhtml+xml, */*";

            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko";
        //    request.Connection = "Keep-Alive";
           // request.Method = "Get";
           // request.Accept = "text";
            request.AllowAutoRedirect = true;
            request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

            Cookie emersoncookie = new Cookie("SMCHALLENGE",  "YES");
            emersoncookie.Domain = "mydomain";
            emersoncookie.Path = "/";




           // authentication
            var cache = new CredentialCache();
            cache.Add(uri, "False", new NetworkCredential("myusername", "mypassword"));

            request.Credentials = cache;


            // response.
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                using (Stream stream = response.GetResponseStream())
                {
                    XmlTextReader reader = new XmlTextReader(stream);
                    MessageBox.Show(stream.ToString());
                }
            }

        }
        catch (WebException exception)
        {
            string responseText;

            using (var reader = new StreamReader(exception.Response.GetResponseStream()))
            {
                responseText = reader.ReadToEnd();
                MessageBox.Show(responseText.ToString());
            }
        }
like image 672
Jasen Avatar asked May 02 '26 11:05

Jasen


1 Answers

After doing some more reading on the MSDN website I decided to go a different route.

I ended up making this a service since it will need to be a service at the end of the day and did the following:

 CookieContainer emersoncookie = new CookieContainer();

            HttpWebRequest request = (HttpWebRequest)
            WebRequest.Create("https://websiteaddress");

            request.Credentials = new NetworkCredential("username", "password");
            request.CookieContainer = emersoncookie;

            request.Method = "GET";
            HttpWebResponse response = (HttpWebResponse)
            request.GetResponse();

            Stream resStream = response.GetResponseStream();

            using (Stream output = File.OpenWrite(@"c:\\somefolder\\somefile.someextention"))
            using (Stream input = resStream)
            {
                input.CopyTo(output);
            }

To anyone that might be running into Siteminder authentication issues, this piece of code works pretty well.

like image 96
Jasen Avatar answered May 04 '26 00:05

Jasen



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!