OK, miałem ten błąd i walczyłem z nim przez długi czas (lata) podczas interakcji z moją aplikacją Ruby on Rails.
Miałem domyślne poświadczenia skonfigurowane zgodnie z opisem w zaakceptowanej odpowiedzi, ale nadal otrzymałem błąd i polegałem na odpowiedzi didReceiveChallenge w celu dostarczenia poświadczeń - na szczęście to działało jako obejście.
Ale! Właśnie znalazłem rozwiązanie!
Pracowałem nad przeczuciem, że pola protectedSpace nie odpowiadają wyzwaniu autoryzacji z serwera Ruby on Rails - i zajrzałem do pola dziedziny, które wydawało się być jedynym, które pozostawało niezdefiniowane.
Zacząłem od wydrukowania nagłówków odpowiedzi serwera i chociaż mogłem je sprawdzić, nie zawierały one pola WWW-Authorization, które zawierałoby pole realm.
Pomyślałem, że może to być spowodowane tym, że moja aplikacja Rails nie określała dziedziny, więc zacząłem przyglądać się stronie Railsów.
Odkryłem, że mogę określić w wezwaniu dziedzinę,
authenticate_or_request_with_http_basic
... którego używam do podstawowego uwierzytelniania HTTP.
Nie określałem jeszcze domeny, więc dodałem,
authenticate_or_request_with_http_basic("My Rails App")
Następnie dodałem odpowiedni ciąg do protectionSpace,
NSURLProtectionSpace *protectionSpace =
[[NSURLProtectionSpace alloc] initWithHost:@"myrailsapp.com"
port:443
protocol:NSURLProtectionSpaceHTTPS
realm:@"My Rails App"
authenticationMethod:NSURLAuthenticationMethodHTTPBasic];
Voila! To zadziałało i już nie rozumiem,
CredStore - performQuery - Error copying matching creds. Error=-25300
Nawet po określeniu dziedziny w aplikacji Rails, nadal nie widzę jej przekazywanej w nagłówku HTTP, nie wiem dlaczego, ale przynajmniej działa.