2010-08-18 22 views
17

Estoy creando mi primera aplicación para iPad. Tengo una aplicación web que me gustaría autenticar y extraer datos de forma RESTANTE.iOS: ¿Cómo hacer una conexión segura HTTPS para pasar credenciales?

Si abre la URL en el navegador (https://myapp.com/auth/login), obtendrá un formulario para ingresar su nombre de usuario y contraseña. Pensaba que podía establecer las credenciales de inicio de sesión en los datos de la publicación de la solicitud y enviar los datos.

El sitio usa HTTPS para iniciar sesión, de modo que las credenciales no se transfieran en texto plano a través de Internet.

¿Cómo puedo hacer una conexión segura HTTPS para pasar credenciales? ¿Esto recordará que estoy conectado para futuras solicitudes? ¿Cuál es la mejor manera de hacer esto?

Respuesta

13

actualizarse una vez más, Octubre 2013

Aunque en el momento de escribir esta respuesta, ASIHTTPRequest se mantuvo un amplio apoyo, esto ya no es el caso. No se recomienda para proyectos nuevos; en su lugar, use NSURLConnection directamente o use AFNetworking.

Con AFNetworking, existe un método [httpClient setAuthorizationHeaderWithUsername:username password:password]; para la autenticación HTTP, y crear un formulario de estilo POST es igualmente fácil: consulte AFNetworking Post Request para eso.


Respuesta original:

Mucha gente utiliza la clase ASIHTTPRequest para hacer frente a http & https en el iPhone/IPAD, ya que tiene un montón de características útiles que son difíciles o que consume tiempo para lograr con el construido en clases:

http://allseeing-i.com/ASIHTTPRequest/

Comenzando en el nivel más simple usted comenzaría con algo como:

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"]; 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 

    [request startSynchronous]; 
    NSError *error = [request error]; 
    if (!error) { 
     NSString *response = [request responseString]; 
     NSLog(@"response = %@", response); 
    } 

Si está utilizando la autenticación HTTP, ASIHTTPRequest solicitará automáticamente al usuario el nombre de usuario y la contraseña.

SI está utilizando otra forma de autenticación, probablemente necesite solicitar el nombre de usuario y la contraseña del usuario usted mismo, y enviarlos como un valor POST o un encabezado http personalizado, y luego la respuesta puede incluir un token en una respuesta JSON o XML, o podría establecer una cookie.

Si agrega más detalles sobre cómo funciona el esquema de autenticación, puedo ser un poco más específico.

actualización

Sobre la base de la actualización, para emular un formulario de envío que sólo había necesidad de añadir líneas como:

[request addPostValue:usernameString forKey:@"username"]; 
[request addPostValue:passwordString forKey:@"password"]; 

También tendrá que cambiar la forma de crear la solicitud , en lugar de:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 

hacer:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 

(También me olvido de mencionarlo anteriormente, hay un código que puse antes está utilizando una solicitud síncrona, por lo que querría reemplazarlo por uno asíncrono para evitar el bloqueo de la interfaz de usuario una vez que haya demostrado que está funcionando.)

Hay un marco JSON para el iPhone aquí:

http://code.google.com/p/json-framework/

que funciona bien para mí y es fácil de usar con ASIHTTPRequest.

+0

he añadido un poco más de explicación. La aplicación no es autenticación HTTP básica. Es un formulario que se muestra en una página web que ingresa sus credenciales. Estoy tratando de ajustarlo para que pueda actuar como una API RESTful que puedo autenticar contra y consultar datos (que se devolverán en formato JSON). – Andrew

+0

Bien, he actualizado mi respuesta con un poco más de detalle. Básicamente, todo debería ser bastante sencillo con ASIHTTPRequest. – JosephH

+0

Entonces, una vez que haya "enviado" la solicitud a/auth/login, ¿mi aplicación de iPhone recordará que está autenticada? En el navegador, hay cookies que se configuran. En otras palabras, ahora que estoy "autenticado", ¿puedo hacer otra solicitud que requiera que se autentique? (es decir, GET/users/all) – Andrew

Cuestiones relacionadas