Как обработать 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];
}
Другие вопросы по тегам