Как обработать NSURLAuthenticationChallenge в iOS7
Я хочу опубликовать что-то в веб-сервисе, у которого проблема с SSL. Я использовал следующие методы:
NSURLConnection * urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
Следует немедленно начать отправку данных, на которые было установлено в запросе; Но служба имеет проблемы с безопасностью, и она не работает должным образом. Однако я хочу отправить данные и хочу игнорировать проблему безопасности; Поэтому я использовал следующие методы NSURLConnectionDelegate:
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];
}
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
[challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
}
Но они устарели. Как я могу решить проблему безопасности и сказать, что нужно передавать данные в веб-сервис, не обращая на это внимания?
1 ответ
Вы должны использовать willSendRequestForAuthenticationChallenge, как это.
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
self.challenge = challenge;
[self askUserAcceptSSLError];
}
- (void)askUserAcceptSSLError
{
// Ask user like UIAlertView or so.
// Put these responses in UIAlertView delegate ...
// If User accepts (or force this if you want ignore SSL certificate errors):
[[self.challenge sender]
useCredential:[NSURLCredential credentialForTrust:self.challenge.protectionSpace.serverTrust]
forAuthenticationChallenge:self.challenge];
[[self.challenge sender] continueWithoutCredentialForAuthenticationChallenge:self.challenge];
// If User deny request:
[[self.challenge sender] cancelAuthenticationChallenge:self.challenge];
}