Używam iOS sdk5.0. Uderzam w łącze za pomocą NSURLConnection i tworzę zapytanie. Ale moja kontrola nie wchodzi w metodę didReceiveAuthenticationChallenge. Czy w iOS5.0 nie wywołano metody didReceiveAuthenticationChallenge?didReceiveAuthenticationChallenge nie otrzymało połączenia
Odpowiedz
Według Docs z NSURLConnectionDelegate
connection:canAuthenticateAgainstProtectionSpace:
connection:didReciveAuthenticationChallenge:
connection:didCancelAuthenticationChallenge:
są przestarzałe i nowy kod powinien przyjąć
connection:willSendRequestForAuthenticationChallenge
Starsi uczestnicy nadal będą nazywane kompatybilności, ale ponieść więcej opóźnień w radzeniu sobie z wyzwaniem uwierzytelniania .
Miałem ten sam problem (zobacz mój komentarz powyżej). W moich wyszukiwaniach natknąłem się na tę kwestię: https://gist.github.com/1675763. Próbowałem kodu w ścieżce AUTH_NEW. Delegat wciąż nie był wzywany. Następnie zauważyłem komentarz w wierszu 40: "Być może iOS 5 nie może obsługiwać algorytmu podpisu DSA."
Zrobiłem kilka wyszukiwań i nie znalazłem nic, co wskazywałoby, że ograniczenie było problemem. W końcu, w desperacji, zmieniłem to. Używałem keytool java (nowa wersja opensl +), aby wygenerować certyfikat z podpisem własnym. Domyślnie korzysta z DSA. Z desperacji użyłem flagi, by zmusić ją do użycia RSA. Wtedy delegat został wezwany, a kod w powyższym punkcie zadziałał.
Nadal nie widzę żadnej dokumentacji, która mówi, że nie można używać DSA. openssl domyślnie używa RSA, więc ludzie, którzy go używają, prawdopodobnie nigdy na niego nie wpadną.
Krótka historia: sprawdź swój certyfikat i upewnij się, że jest podpisany przez RSA, a nie DSA.
Chciałbym podkreślić znaczenie, jakie czyni Chris Westin. Poza tym faktycznie utworzyłem klucz RSA, ale przypadkowo skopiowałem DSA do serwera. Jeśli masz wątpliwości, musisz użyć polecenia -v (verbose), aby upewnić się, że posiadasz odpowiedni certyfikat. Przykład:
keytool -list -v -keystore <name of keystore here>
- 1. Django "get() otrzymało nieoczekiwany argument słowa kluczowego" pk "" error
- 2. PoolingHttpClientConnectionManager nie zwalnia połączenia
- 3. połączenia Nieświeży, validationQuery nie rozwiąże
- 4. org.postgresql.util.PSQLException: Próba połączenia nie powiodła
- 5. Nie można zamknąć połączenia MongoDB z Node.js?
- 6. Zdarzenie połączenia socket.io nie wystrzeliwuje w firefox
- 7. Nie wolno po operacji połączenia zamknięte
- 8. NetworkInfo.isConnected() zwraca true, ale nie ma połączenia
- 9. ActiveDirectoryMembershipProvider - "Nie można ustanowić bezpiecznego połączenia"
- 10. Powodzenie połączenia zwrotnego Backbone() nie działa
- 11. Nie można uzyskać połączenia JDBC z PostgreSQL
- 12. Python3 urllib.request nie zamknie połączenia natychmiast
- 13. wykryć, jeśli nie ma połączenia internetowego
- 14. MySql.Data.MySqlClient.MySqlException: „localhost hosta nie obsługuje połączenia SSL”.
- 15. Błąd połączenia jQuery ajax "Nie znaleziono"
- 16. Kiedy lepiej nie używać połączenia wewnętrznego?
- 17. Ciąg połączenia nie działa z MySQL
- 18. Nie można rozwiązać połączenia do invokeStaticMethod?
- 19. Cassandra/Eclipse - Nie można nawiązać połączenia
- 20. Aby zamknąć lub nie zamknąć połączenia Oracle?
- 21. Dlaczego wyjątek C++ nie dostarcza szczegółów połączenia?
- 22. Dlaczego funkcja Date.new nie inicjalizuje połączenia?
- 23. Łańcuch połączenia Entity Framework, a nie konfiguracja
- 24. Nie można uzyskać węzła-apn do połączenia
- 25. Dlaczego `cat` nie dołącza do połączenia` file`?
- 26. Błąd połączenia NodeJS - nie ma metody "rejestrator"
- 27. twilio Połączenia aplikacji z aplikacjami nie działa
- 28. Nie można sprawdzić poprawności nowo ustanowionego połączenia
- 29. Czy można odbierać połączenia wychodzące podczas połączenia?
- 30. Ciąg połączenia do połączenia z .MDF
dzięki himanshu. Tak więc, zamiast tych metod, jeśli NSURLConnectionDelegate, powinienem użyć połączenia: willSendRequestForAuthenticationChallenge (w iOS 5). Ale kiedy uruchomię ten kod w wersji innej niż 5.0, to spowoduje błąd. Dobrze?? – anshul
ponownie zgodnie z [Docs] (http://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSURLConnectionDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intf/NSURLConnectionDelegate) 'Jeśli połączenie : willSendRequestForAuthenticationChallenge: nie jest zaimplementowane, starsze, nieaktualne połączenie metod: canAuthenticateAgainstProtectionSpace :, połączenie: didReceiveAuthenticationChallenge: i połączenie: didCancelAuthenticationChallenge: zamiast tego są wywoływane. " –
Mam implementację nowego, willSendRequestForAuthenticationChallenge, który skonfigurowałem jako delegata, i nie zostaje wezwany. Próbuję omijać używanie samopodpisanego certyfikatu do testowania i otrzymuję żądanie API z błędem: Error Domain = NSURLErrorDomain Code = -1200 "Wystąpił błąd SSL i nie można nawiązać bezpiecznego połączenia z serwerem. "itd. Wyszukiwania wskazują, że ta delegowana metoda powinna pozwolić mi to zrobić, ale delegat nawet nie zostaje wezwany. –