2015-04-29 4 views
2

Я пытаюсь написать код для подключения к сайту HTTPS, который использует аутентификацию Siteminder.C# Siteminder Authentication

Я продолжаю получать 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()); 
      } 
     } 

ответ

0

После этого еще некоторое чтение на веб-сайте 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, этот кусок кода работает очень хорошо.

0

Я не мог заставить код 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.