buttons - toolbar iphone
iOS: ¿Cómo hacer una conexión HTTPS segura para pasar las credenciales? (1)
Estoy creando mi primera aplicación para iPad. Tengo una aplicación web con la que me gustaría autenticar y extraer datos de una manera REST.
Si abre la URL en el navegador ( https://myapp.com/auth/login ), obtendrá un formulario para ingresar su nombre de usuario y contraseña. Estaba pensando que podría establecer las credenciales de inicio de sesión en los datos de publicación de la solicitud y enviar los datos.
El sitio utiliza HTTPS para iniciar sesión, por lo que las credenciales no se pasan en texto sin formato a través de Internet.
¿Cómo puedo hacer una conexión HTTPS segura para pasar las credenciales? ¿Recordará esto que estoy conectado para futuras solicitudes? ¿Cuál es la mejor manera de hacer esto?
Nueva actualización, octubre de 2013
Aunque en el momento en que escribí esta respuesta, ASIHTTPRequest se mantuvo ampliamente, esto ya no es el caso. No se recomienda para proyectos nuevos; en su lugar, use NSURLConnection directamente o use AFNetworking.
Con AFNetworking, hay un [httpClient setAuthorizationHeaderWithUsername:username password:password];
El método para la autenticación http y la creación de un formulario de estilo POST es igual de fácil: consulte la Solicitud de Publicación de AFNetworking para eso.
Respuesta original:
Mucha gente usa la clase ASIHTTPRequest para lidiar con http & https en el iPhone / iPad, ya que tiene muchas características útiles que son difíciles o requieren mucho tiempo de lograr con las clases integradas:
http://allseeing-i.com/ASIHTTPRequest/
Comenzando en el nivel más simple, comenzarías 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 alguna otra forma de autenticación, probablemente deba solicitar el nombre de usuario y la contraseña del usuario, y enviarlos como un valor POST o un encabezado http personalizado, y luego la respuesta puede incluir un token en un JSON o Respuesta 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.
Actualizar
En función de la actualización, para emular un formulario POST solo tendría que agregar líneas como:
[request addPostValue:usernameString forKey:@"username"];
[request addPostValue:passwordString forKey:@"password"];
También deberá cambiar la forma en que crea 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 anteriormente que usa una solicitud sincrónica, por lo que querría reemplazarlo por uno asíncrono para evitar el bloqueo de la interfaz de usuario una vez que hayas probado que estaba 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.