2011-11-04 25 views
5

Estoy usando iOS sdk5.0. Estoy golpeando un enlace usando NSURLConnection y creando una solicitud. Pero mi control no va al método didReceiveAuthenticationChallenge. ¿No se llama a didReceiveAuthenticationChallenge en iOS5.0?didReceiveAuthenticationChallenge no se llama

Respuesta

14

Según Docs de NSURLConnectionDelegate

connection:canAuthenticateAgainstProtectionSpace: 
connection:didReciveAuthenticationChallenge: 
connection:didCancelAuthenticationChallenge: 

están obsoletas y el nuevo código debe adoptar

connection:willSendRequestForAuthenticationChallenge 

Los delegados de más edad todavía serán llamados para la compatibilidad, pero incurrir más latencia para hacer frente a la demanda de autenticación .

+0

gracias himanshu. Entonces, en lugar de este método, si NSURLConnectionDelegate, debería usar connection: willSendRequestForAuthenticationChallenge (en iOS 5). Pero cuando ejecute este código en una versión que no sea 5.0, generará un error. ¿¿Derecha?? – anshul

+0

nuevamente según [Docs] (http://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSURLConnectionDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intf/NSURLConnectionDelegate) 'Si la conexión : willSendRequestForAuthenticationChallenge: no está implementado, la conexión anterior, métodos en desuso: canAuthenticateAgainstProtectionSpace :, connection: didReceiveAuthenticationChallenge :, y conexión: didCancelAuthenticationChallenge: se llaman en su lugar. –

+1

Tengo una implementación de la nueva, willSendRequestForAuthenticationChallenge que configuré como el delegado, y no se llama. Intento moverme usando un certificado autofirmado para probar y obtengo una solicitud API que falló con el error: Dominio de error = NSURLErrorDomain Code = -1200 "Se ha producido un error de SSL y no se puede establecer una conexión segura con el servidor. ", etc. Las búsquedas indican que este método delegado debería permitirme hacer esto, pero ni siquiera se está llamando al delegado. –

1

Estaba teniendo el mismo problema (ver mi comentario anterior). En mis búsquedas, me encontré con esta esencia: https://gist.github.com/1675763. Probé el código en la ruta AUTH_NEW. El delegado aún no estaba siendo llamado. Entonces noté el comentario en la línea 40: "Quizás iOS 5 no puede soportar el algoritmo de firma DSA".

Hice algunas búsquedas, y no encontré nada que indicara que esto era una limitación, era un problema. Finalmente, en desesperación, cambié esto. Estaba usando keytool de java (la versión reinventada de openssl + de Java) para generar mi certificado autofirmado. Utiliza DSA por defecto. Fuera de la desesperación, usé una bandera para obligarlo a usar RSA. Luego se llamó al delegado y funcionó el código en la esencia anterior.

Todavía tengo que ver la documentación que dice que no puede usar DSA. openssl parece usar RSA por defecto, por lo que las personas que lo usan probablemente nunca se topen con esto.

Relato breve: verifique su certificado y asegúrese de que esté firmado con RSA y no con DSA.

0

Me gustaría enfatizar el punto que Chris Westin hace. Y más allá de eso, en realidad creé una clave RSA, pero copié accidentalmente el DSA al servidor. Por lo tanto, cuando tenga dudas, debe usar el comando -v (verboso) para asegurarse de que tiene el certificado correcto en su lugar. Ejemplo:

keytool -list -v -keystore <name of keystore here>