Tengo una aplicación que se comunica con un servidor que usa autenticación HTTP Digest.Uso de Autenticación HTTP Digest en el iPhone
Me parece que la gestión de 'sesión' en el iPhone es bastante "caja negra" para nosotros los desarrolladores. ¿Es cierto que no podemos ver cómo el marco maneja/persiste las sesiones de http?
Si solo estoy siendo tenue aquí, ¿alguien se preocuparía de explicarme cómo manejar probablemente la autenticación HTTP Digest en el iPhone?
Mi carrera básica a través de es:
- hacer una petición a una URL segura
- Server envía un cliente 401
- crea y persiste una credencial, y lo pasa de nuevo al servidor
- el servidor verifica la credencial, completa la solicitud si se verifica, envía otra 401 si no es así.
- hacer una solicitud posterior para asegurar url
- peticiones al servidor de autorización de nuevo ........
Esto funciona para las solicitudes individuales, pero si hago peticiones adicionales, posteriores, la autorización de solicitudes de servidor de nuevo. El servidor ha persistido en una sesión para el usuario en particular, pero el iPhone no realiza una solicitud dentro de la misma sesión por algún motivo ... Por lo tanto, el servidor tiene que descartar el objeto de autenticación y crear uno nuevo cada vez que el cliente realiza una solicitud a una url segura.
Estoy seguro de que este no es el comportamiento correcto.
Si nos fijamos en cómo un navegador se comporta de esta situación:
- El navegador solicita datos de URL seguro
- servidor envía 401
- navegador solicita el usuario para credencial, persiste, la envía al servidor
- servidor verifica credencial, devuelve datos si se verifica, envía otro 401 si no es así.
- las solicitudes subsiguientes realizadas a las URL seguras no se solicitan para las credenciales porque el navegador administra la sesión.
Estoy creando NSURLCredential y persistiéndolo dentro de NSURLCrendtialStorage. Luego, cuando la aplicación recibe el 'didReceiveAuthenticationChallenge', recupero la credencial del almacenamiento y la devuelvo, creando la credencial si no existe (en la primera solicitud).
Cualquier ayuda sería muy apreciada. Gracias.
Jasarien, ¿tomo la señal de que esto te pone en el camino correcto? (por mi curiosidad, y tal vez el beneficio de que otra persona encuentre el mismo problema). –