C#Siteminder身份验证

C#Siteminder身份验证,c#,siteminder,C#,Siteminder,我正在尝试编写一些代码来连接到使用Siteminder身份验证的HTTPS站点 我一直在申请401。有什么想法吗 我在这里读了一些不同的东西,但没有一件看起来真的那么有用。我还使用Fiddler/Firefox Tamper来窥探正在发生的事情 以下是到目前为止我对代码的了解: try { Uri uri = new Uri("https://websiteaddresshere"); HttpWebRequest request

我正在尝试编写一些代码来连接到使用Siteminder身份验证的HTTPS站点

我一直在申请401。有什么想法吗

我在这里读了一些不同的东西,但没有一件看起来真的那么有用。我还使用Fiddler/Firefox Tamper来窥探正在发生的事情

以下是到目前为止我对代码的了解:

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());
            }
        }

在MSDN网站上做了更多的阅读之后,我决定走另一条路

我最终将此作为一项服务,因为它需要在一天结束时成为一项服务,并执行了以下操作:

 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);
            }

对于任何可能遇到Siteminder身份验证问题的人来说,这段代码工作得非常好。

我无法让Jasen的代码正常工作。也许你的SM设置与我的不同。但使用SiteMinder,通常需要两步认证过程。下面的代码块适用于我:

        //Make initial request
        RestClient client = new RestClient("http://theResourceDomain/myApp");
        client.CookieContainer = new CookieContainer();
        IRestResponse response = client.Get(new RestRequest("someProduct/orders"));

        //Now add credentials.
        client.Authenticator = new HttpBasicAuthenticator("username", "password");
        //Get resource from the SiteMinder URI which will redirect to the correct API URI upon authentication.
        response = client.Get(new RestRequest(response.ResponseUri)); 
尽管这使用了RestSharp,但可以使用HttpClient甚至HttpWebRequest轻松复制它