我試圖讓上述三個工作正常,並且有些東西沒有點擊。具體來說,身份驗證請求在出現時不會被觸發。據我在這裏讀什麼,相關作品是: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。認證不包括在標題中(我寧願不這樣做),但如果沒有其他解決方案,我會嘗試這樣的事情。
一如既往,非常感謝您的幫助。它是無價的。
你可以如此善待張貼你的soloution? – Bjarke
我的歉意 - 我沒有看到你的這個要求。我關閉了這一段時間,但總的來說,我所做的是將頭部附加到請求「手動」 – jb44