2011-03-05 17 views
5

que estoy tratando de entrar en mi aplicación web utilizando HttpWebRequest pero me siguen dando el siguiente error:401 no autorizado volvieron a petición GET (https) con credenciales correctas

System.Net.WebException: The remote server returned an error: (401) Unauthorized. 

violinista tiene el siguiente resultado:

Result Protocol Host   URL 
200 HTTP  CONNECT  mysite.com:443 
302 HTTPS  mysite.com  /auth 
401 HTTP  mysite.com  /auth 

Esto es lo que estoy haciendo:

// to ignore SSL certificate errors 
public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) 
{ 
    return true; 
} 

try 
{ 
    // request 
    Uri uri = new Uri("https://mysite.com/auth"); 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri) as HttpWebRequest; 
    request.Accept = "application/xml"; 

    // authentication 
    string user = "user"; 
    string pwd = "secret"; 
    string auth = "Basic " + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(user + ":" + pwd)); 
    request.Headers.Add("Authorization", auth); 
    ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications); 

    // response. 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

    // Display 
    Stream dataStream = response.GetResponseStream(); 
    StreamReader reader = new StreamReader(dataStream); 
    string responseFromServer = reader.ReadToEnd(); 
    Console.WriteLine(responseFromServer); 

    // Cleanup 
    reader.Close(); 
    dataStream.Close(); 
    response.Close(); 
} 
catch (WebException webEx) 
{ 
    Console.Write(webEx.ToString()); 
} 

soy capaz de iniciar sesión en el mismo sitio sin ningún problema usando ASIHTTPRequest en una aplicación de Mac como esto:

NSURL *login_url = [NSURL URLWithString:@"https://mysite.com/auth"]; 
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:login_url]; 
[request setDelegate:self]; 
[request setUsername:name]; 
[request setPassword:pwd]; 
[request setRequestMethod:@"GET"]; 
[request addRequestHeader:@"Accept" value:@"application/xml"]; 
[request startAsynchronous];  

Respuesta

9

Prueba esto:

 Uri uri = new Uri("https://mysite.com/auth"); 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri) as HttpWebRequest; 
     request.Accept = "application/xml"; 

     // authentication 
     var cache = new CredentialCache(); 
     cache.Add(uri, "Basic", new NetworkCredential("user", "secret")); 
     request.Credentials = cache; 

     ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications); 

     // response. 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

Nota el uso de la clase NetworkCredential en lugar de extender sus propios encabezados de autenticación.

+2

Eso es lo que intenté al principio, y sigo teniendo 401. La única diferencia es que Fiddler dice que no hay encabezados de autorización presentes en la solicitud. – David

+0

¿Está seguro de que el nombre de usuario y la contraseña que está utilizando son idénticos a las credenciales que está utilizando en la aplicación Mac? –

+0

sí, estoy absolutamente seguro. ¿hay otra biblioteca como webrequest que pueda probar? – David

Cuestiones relacionadas