OK, tôi đã gặp lỗi này và đã chiến đấu với nó trong một thời gian dài (nhiều năm) khi tương tác với ứng dụng Ruby on Rails của tôi.
Tôi đã thiết lập thông tin đăng nhập mặc định như được mô tả trong câu trả lời được chấp nhận, nhưng vẫn gặp lỗi và đang dựa vào phản hồi didReceiveChallenge để cung cấp thông tin đăng nhập - rất may là điều đó đã hoạt động bình thường.
Nhưng! Tôi vừa tìm ra giải pháp!
Tôi đang làm việc với linh cảm rằng các trường protectedSpace không phù hợp với thử thách Cấp quyền từ máy chủ Ruby on Rails - và tôi đã xem xét trường cảnh giới, dường như là trường duy nhất chưa được xác định.
Tôi bắt đầu bằng cách in ra các tiêu đề phản hồi của máy chủ và mặc dù tôi có thể kiểm tra các tiêu đề này, chúng không bao gồm trường WWW-Authorization mà sẽ bao gồm trường cảnh giới.
Tôi nghĩ điều này có thể là do ứng dụng Rails của tôi không chỉ rõ lĩnh vực, vì vậy tôi bắt đầu xem xét khía cạnh Rails của mọi thứ.
Tôi thấy tôi có thể chỉ định lĩnh vực trong cuộc gọi tới,
authenticate_or_request_with_http_basic
... mà tôi đang sử dụng để xác thực HTTP cơ bản.
Tôi đã không chỉ định một cảnh giới, vì vậy hãy thêm một cảnh giới,
authenticate_or_request_with_http_basic("My Rails App")
Sau đó, tôi đã thêm chuỗi tương ứng vào ProtectionSpace,
NSURLProtectionSpace *protectionSpace =
[[NSURLProtectionSpace alloc] initWithHost:@"myrailsapp.com"
port:443
protocol:NSURLProtectionSpaceHTTPS
realm:@"My Rails App"
authenticationMethod:NSURLAuthenticationMethodHTTPBasic];
Thì đấy! Điều đó đã hiệu quả và tôi không còn nhận được
CredStore - performQuery - Error copying matching creds. Error=-25300
Ngay cả sau khi chỉ định lĩnh vực trong ứng dụng Rails, tôi vẫn không thấy nó được truyền trong tiêu đề HTTP, tôi không biết tại sao, nhưng ít nhất nó hoạt động.