2011-11-04 31 views
5

Tôi đang sử dụng iOS sdk5.0. Tôi đang nhấn một liên kết bằng cách sử dụng NSURLConnection và tạo một yêu cầu. Nhưng điều khiển của tôi không đi vào phương thức didReceiveAuthenticationChallenge. Là didReceiveAuthenticationChallenge không được gọi trong iOS5.0?didReceiveAuthenticationChallenge không nhận được gọi là

Trả lời

14

Theo Docs của NSURLConnectionDelegate

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

đang bị phản đối và mã mới nên áp dụng

connection:willSendRequestForAuthenticationChallenge 

Các đại biểu cũ vẫn sẽ được gọi để tương thích, nhưng phải chịu độ trễ hơn trong việc đối phó với các thách thức xác thực .

+0

cảm ơn himanshu. Vì vậy, thay vì phương thức này nếu NSURLConnectionDelegate, tôi nên sử dụng kết nối: willSendRequestForAuthenticationChallenge (trong iOS 5). Nhưng khi tôi sẽ chạy mã này trong một phiên bản khác hơn 5.0, sau đó nó sẽ cung cấp cho các lỗi. Đúng?? – anshul

+0

lại theo [Documents] (http://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSURLConnectionDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intf/NSURLConnectionDelegate) 'Nếu kết nối : willSendRequestForAuthenticationChallenge: không được triển khai, kết nối phương thức cũ, không được chấp nhận: canAuthenticateAgainstProtectionSpace :, connection: didReceiveAuthenticationChallenge :, và connection: didCancelAuthenticationChallenge: được gọi thay thế.' –

+1

Tôi đã triển khai thực hiện cái mới, willSendRequestForAuthenticationChallenge mà tôi đã thiết lập đại biểu, và nó không được gọi. Tôi đang cố gắng sử dụng chứng chỉ tự ký để kiểm tra và tôi nhận được yêu cầu API không thành công do lỗi: Lỗi miền = NSURLErrorDomain Code = -1200 "Đã xảy ra lỗi SSL và không thể thực hiện kết nối an toàn với máy chủ. ", vv Tìm kiếm cho biết phương thức ủy nhiệm này sẽ cho phép tôi làm điều này, nhưng đại biểu thậm chí không được gọi. –

1

Tôi đã gặp sự cố tương tự (xem nhận xét của tôi ở trên). Trong tìm kiếm của tôi, tôi đã đi qua ý chính này: https://gist.github.com/1675763. Tôi đã thử mã trong đường dẫn AUTH_NEW. Đại biểu vẫn chưa được gọi. Sau đó, tôi nhận thấy nhận xét trên dòng 40: "Có lẽ iOS 5 không thể hỗ trợ thuật toán chữ ký DSA."

Tôi đã thực hiện một số tìm kiếm và không thấy gì để chỉ ra rằng đây là một hạn chế là một vấn đề. Cuối cùng, trong tuyệt vọng, tôi đã thay đổi điều này. Tôi đã sử dụng keytool của java (phiên bản được phát minh lại của openssl + của Java) để tạo ra chứng chỉ tự ký của tôi. Nó sử dụng DSA theo mặc định. Trong tuyệt vọng, tôi đã sử dụng một lá cờ để buộc nó sử dụng RSA. Sau đó, các đại biểu đã được gọi, và các mã trong Gist ở trên làm việc.

Tôi vẫn chưa thấy bất kỳ tài liệu nào cho biết bạn không thể sử dụng DSA. openssl dường như sử dụng RSA theo mặc định, do đó, mọi người sử dụng có thể không bao giờ chạy vào điều này.

Câu chuyện ngắn: kiểm tra chứng chỉ của bạn và đảm bảo rằng chứng chỉ được ký với RSA chứ không phải DSA.

0

Tôi muốn nhấn mạnh điểm Chris Westin tạo ra. Và ngoài ra, tôi thực sự đã tạo ra một khóa RSA, nhưng vô tình sao chép một DSA vào máy chủ. Vì vậy, khi nghi ngờ, bạn cần phải sử dụng lệnh v (verbose) để đảm bảo rằng bạn đã có đúng cert tại chỗ. Ví dụ:

keytool -list -v -keystore <name of keystore here> 
Các vấn đề liên quan