2013-04-21 10 views
6

मेरे सर्वर को क्लाइंट प्रमाण पत्र की आवश्यकता होती है, कुछ समय बाद AFNetworking दस्तावेज़ों में उदाहरणों को खोजना और पढ़ने के बाद मैंने सेट प्रमाणीकरणChallengeBlock सेट करने और क्लाइंट प्रमाणपत्र प्रदान करने का प्रयास किया।AFNetworking setAuthenticationChallengeBlock

ब्राउज़र में प्रमाणपत्र प्रमाणित ठीक काम करता है।

[requestOperation setAuthenticationChallengeBlock:^(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge) 
    { 
     NSLog(@"AuthenticationChallenge"); 

     NSString *thePath = [[NSBundle mainBundle] pathForResource:@"client" ofType:@"pfx"]; 
     NSData *PKCS12Data = [[NSData alloc] initWithContentsOfFile:thePath]; 
     CFDataRef inPKCS12Data = (__bridge CFDataRef)PKCS12Data; 
     SecIdentityRef identity; 

     [self extractIdentity:inPKCS12Data :&identity]; 

     SecCertificateRef certificate = NULL; 
     SecIdentityCopyCertificate (identity, &certificate); 

     const void *certs[] = {certificate}; 
     CFArrayRef certArray = CFArrayCreate(kCFAllocatorDefault, certs, 1, NULL); 

     NSURLCredential *credential = [NSURLCredential credentialWithIdentity:identity certificates:(__bridge NSArray*)certArray persistence:NSURLCredentialPersistencePermanent]; 
     [challenge.sender useCredential:credential forAuthenticationChallenge:challenge]; 
    }]; 
    [requestOperation start]; 

लेकिन ब्लॉक के अंदर कोड कभी नहीं कहा जा रहा है और सर्वर अपेक्षा के अनुसार 403 त्रुटि देता है।

setUploadBlock आदि जैसे अन्य ब्लॉक में कोड ठीक काम करता है।

कोई विचार मेरी गलती कहां है?

उत्तर

4

मैं आज रात इसी तरह की एक समस्या में भाग गया। AFNetworking शीर्षलेख फ़ाइलों की आगे की जांच के बाद मुझे अपना मुद्दा मिला। मैं अपने ऑपरेशन पर setAuthenticationAgainstProtectionSpaceBlock ब्लॉक सेट करना भूल गया था।

[requestOperation setAuthenticationAgainstProtectionSpaceBlock:^BOOL(NSURLConnection *connection, NSURLProtectionSpace *protectionSpace) { 

     NSLog(@"Auth against protected space [%@]", protectionSpace); 

     return YES; 

    }]; 

मेरा मानना ​​है कि AFNetworking NSURLConnectionDelegate प्रोटोकॉल विधि को संभालने के लिए इस ब्लॉक का उपयोग करता है: - (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace

+0

धन्यवाद, यह उत्साहजनक है कि मैंने जो गड़बड़ की है। –

+2

कृपया आप एक पूर्ण उदाहरण दिखा सकते हैं? – Christian

+0

मुझे एक पूर्ण उदाहरण भी पसंद आएगा। – lostintranslation