2011-09-10 100 views
2

我試圖讓上述三個工作正常,並且有些東西沒有點擊。具體來說,身份驗證請求在出現時不會被觸發。據我在這裏讀什麼,相關作品是:ios https和基本身份驗證和發佈請求

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace 
{ 
    NSLog(@"protection space"); 
    return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
{ 
    NSLog(@"auth challenge"); 
    NSInteger count = [challenge previousFailureCount]; 
    if (count > 0) 
    { 
     NSLog(@"count > 0"); 
     NSObject<ServiceDelegate> *delegate = [currentRequest delegate]; 
     [[challenge sender] cancelAuthenticationChallenge:challenge]; 
     if ([delegate respondsToSelector:@selector(wrapperHasBadCredentials:)]) 
     { 
      [delegate rbService:self wrapperHasBadCredentials:self]; 
     } 
     return; 
    } 

    NSArray *trustedHosts = [[NSArray alloc] initWithObjects:@"myserver", nil];  
    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) 
    { 
     NSLog(@"server trust"); 
     if ([trustedHosts containsObject:challenge.protectionSpace.host]) 
     { 
      [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; 
     } 
     [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge]; 
    } 
    else 
    { 
     NSLog(@"credentials"); 
     NSURLCredential* credential = [[[NSURLCredential alloc] initWithUser:@"xxx" password:@"xxx" persistence:NSURLCredentialPersistenceForSession] autorelease]; 
     [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; 
    } 

} 

目標服務器設置爲兩個URL,兩者都提示使用基本身份驗證用戶名/密碼的一個HTTPS和HTTP一個,。我已經使用Firefox檢查了目標服務器,並且一切似乎都按照廣告的方式工作。目標服務器使用不受信任的證書,但我認爲我已經在代碼中處理了這個問題。也許不會。

在應用程序中的特定行爲:

當使用HTTP日誌讀取:
日誌 - 保護空間
(然後返回401代碼)

當使用HTTPS:
日誌 - 保護空間
日誌 - 授權挑戰
日誌 - 服務器信任
日誌 - 保護空間
(然後返回一個401碼)

在第一種情況下,它到達canAuthenticate ......部分,退貨,但當時並沒有挑戰的認證,並返回一個401響應。

在第二個例子中,它做了所有這些,實際上是挑戰,然後再次進入canAuthenticate ...部分,返回並返回401響應。

請記住,該請求是POST請求,包含標頭和HTTPBody。認證不包括在標題中(我寧願不這樣做),但如果沒有其他解決方案,我會嘗試這樣的事情。

一如既往,非常感謝您的幫助。它是無價的。

回答

2

看起來這裏的答案必須是發送認證以及POST請求。我在想,挑戰/響應過程會以某種方式將這些頭文件本身添加到請求中,但顯然不是。

+0

你可以如此善待張貼你的soloution? – Bjarke

+0

我的歉意 - 我沒有看到你的這個要求。我關閉了這一段時間,但總的來說,我所做的是將頭部附加到請求「手動」 – jb44