2012-04-08 22 views
5

Quiero que mi aplicación se autentique contra el dispositivo, es decir, pasar el nombre de usuario y la contraseña a través de https.Autenticación IOS https

Miré a algunos ejemplos y básicamente construir la siguiente:

-(void)authentication 
{ 
    //setting the string of the url taking from appliance IP. 
    NSString *urlString =[NSString 
          stringWithFormat: 
          @"http://%@",appliance_IP.text]; 
    //define the url with the string 
    NSURL *url = [NSURL URLWithString:urlString]; 

    //creating request 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

    //setting credential taking from the username and password field 
    NSURLCredential *credential = [NSURLCredential credentialWithUser:username.text password:password.text persistence:NSURLCredentialPersistenceForSession]; 


    NSURLProtectionSpace *protectionSpace= 
    [[NSURLProtectionSpace alloc]initWithHost:urlString port:443 protocol:@"https" realm:nil authenticationMethod:nil ]; 


    [[NSURLCredentialStorage sharedCredentialStorage] setDefaultCredential:credential forProtectionSpace:protectionSpace]; 

    [ NSURLConnection sendSynchronousRequest:request returningResponse:NULL error:NULL]; 

} 

como yo uso ejemplos que tomé Necesito un poco más de comprensión, NSURLConnection en el ejemplo anterior no contiene el nombre de usuario y contraseña ¿cómo puedo agregarlo? por lo que la solicitud también contendrá nombre de usuario y contraseña o tal vez sea mejor pasar esa información. Actualmente, la solicitud solo contiene la cadena url.

Gracias ER

Respuesta

8

al hacer una solicitud que requiere autenticación, recibirá una devolución de llamada a didReceiveAuthenticationChallenge, que maneja de la siguiente manera:

-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
{ 
    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) 
    { 
     if ([challenge.protectionSpace.host isEqualToString:MY_PROTECTION_SPACE_HOST]) 
     { 
      [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; 
     } 

     [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge]; 
    } 
    else if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodHTTPBasic]) 
    { 
     if ([challenge previousFailureCount] == 0) 
     { 
      NSURLCredential *newCredential; 

      newCredential = [NSURLCredential credentialWithUser:MY_USERNAME 
         password:MY_PASSWORD 
         persistence:NSURLCredentialPersistenceForSession]; 

      [[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge]; 
     } 
     else 
     { 
      [[challenge sender] cancelAuthenticationChallenge:challenge]; 

      // inform the user that the user name and password 
      // in the preferences are incorrect 

      NSLog (@"failed authentication"); 

      // ...error will be handled by connection didFailWithError 
     } 
    } 
} 
0

Debe utilizar NSURLConnectionDelegate delegado de manejar NSURLConnection eventos.

Para la autenticación hay dos métodos delegados: connection:canAuthenticateAgainstProtectionSpace: y connection:didReceiveAuthenticationChallenge:

ver ejemplos en URL Loading System Programming Guide

Cuestiones relacionadas