ตกลงฉันมีข้อผิดพลาดนี้และต่อสู้กับมันมาเป็นเวลานาน (ปี) เมื่อโต้ตอบกับแอป Ruby on Rails ของฉัน
ฉันได้ตั้งค่าข้อมูลรับรองเริ่มต้นตามที่อธิบายไว้ในคำตอบที่ยอมรับแล้ว แต่ยังคงได้รับข้อผิดพลาดและอาศัยการตอบสนองของ didReceiveChallenge ในการจัดหาข้อมูลรับรอง - โชคดีที่ทำงานได้ดี
แต่! ฉันเพิ่งค้นพบวิธีแก้ปัญหา!
ฉันกำลังทำงานอยู่ในลางสังหรณ์ว่าเขตข้อมูลพื้นที่ป้องกันไม่ตรงกับความท้าทายในการอนุญาตจากเซิร์ฟเวอร์ Ruby on Rails - และฉันมองเข้าไปในเขตข้อมูลขอบเขตซึ่งดูเหมือนจะเป็นเพียงช่องเดียวที่ไม่ได้กำหนดไว้
ฉันเริ่มต้นด้วยการพิมพ์ส่วนหัวการตอบกลับของเซิร์ฟเวอร์และแม้ว่าฉันจะสามารถตรวจสอบสิ่งเหล่านี้ได้ แต่ก็ไม่ได้รวมฟิลด์ WWW-Authorization ที่จะรวมฟิลด์ขอบเขตไว้ด้วย
ฉันคิดว่านี่อาจเป็นเพราะแอป Rails ของฉันไม่ได้ระบุขอบเขตดังนั้นฉันจึงเริ่มมองไปที่ด้าน Rails ของสิ่งต่างๆ
ฉันพบว่าฉันสามารถระบุขอบเขตในการโทร
authenticate_or_request_with_http_basic
... ซึ่งฉันใช้สำหรับการพิสูจน์ตัวตน HTTP Basic
ฉันไม่ได้ระบุขอบเขตอยู่แล้วจึงเพิ่มเข้าไป
authenticate_or_request_with_http_basic("My Rails App")
จากนั้นฉันก็เพิ่มสตริงที่เกี่ยวข้องลงใน protectionSpace
NSURLProtectionSpace *protectionSpace =
[[NSURLProtectionSpace alloc] initWithHost:@"myrailsapp.com"
port:443
protocol:NSURLProtectionSpaceHTTPS
realm:@"My Rails App"
authenticationMethod:NSURLAuthenticationMethodHTTPBasic];
โวลา! มันได้ผลและฉันไม่ได้รับอีกต่อไป
CredStore - performQuery - Error copying matching creds. Error=-25300
แม้ว่าจะระบุขอบเขตในแอป Rails แล้ว แต่ฉันก็ยังไม่เห็นมันส่งผ่านในส่วนหัว HTTP ฉันไม่รู้ว่าทำไม แต่อย่างน้อยมันก็ใช้งานได้