iOS: триггер NSURLErrorServerCertificateUntrusted вместо NSURLErrorCancelled при сбое AuthenticationChallenge

Я обрабатываю запрос аутентификации доверия сервера нестандартным способом (сравнивая открытый ключ из доверия сервера с хешированной локальной версией) через urlSessionDelegate аналогично тому, как это делается здесь: Как я могу принять самозаверяющий SSL-сертификат, используя NSURLSession iOS 7 и его семейство методов делегата для целей разработки?

Как описано в документации, мне нужно отменить вызов, если я сама хочу не пройти проверку подлинности на сервере. При этом моя задача с данными будет завершена с NSURLErrorCancelled, У меня есть несколько классов обработки ошибок, которые смотрят на результат NSURLError возвращено датаска, и было бы намного чище для меня, если бы я получил NSURLErrorServerCertificateUntrusted вместо.

Есть ли способ достичь этого? Или эти ошибки сервера будут перенаправляться только тогда, когда аутентификация обрабатывается автоматически, без использования методов делегата?

1 ответ

Будет ли нормальная обработка указанного сертификата потерпеть неудачу с этой ошибкой?

Если это так, вы можете использовать NSURLSessionAuthChallengePerformDefaultHandling в этом случае.

Если нет, то я думаю, что единственный способ - это поиграться с отправителем запроса, что крайне обескураживает, хотя это может не привести к катастрофическим последствиям, если вы вызовете это, а затем вызовете соответствующий обработчик завершения. Однако есть большая вероятность, что вы получите два обратных вызова. Я никогда не пытался это сделать.

Я бы посоветовал подать сообщение об ошибке в Apple с просьбой предоставить правильный API для передачи NSError вместе с отменой.

Другие вопросы по тегам