iOS: триггер NSURLErrorServerCertificateUntrusted вместо NSURLErrorCancelled при сбое AuthenticationChallenge
Я обрабатываю запрос аутентификации доверия сервера нестандартным способом (сравнивая открытый ключ из доверия сервера с хешированной локальной версией) через urlSessionDelegate
аналогично тому, как это делается здесь: Как я могу принять самозаверяющий SSL-сертификат, используя NSURLSession iOS 7 и его семейство методов делегата для целей разработки?
Как описано в документации, мне нужно отменить вызов, если я сама хочу не пройти проверку подлинности на сервере. При этом моя задача с данными будет завершена с NSURLErrorCancelled
, У меня есть несколько классов обработки ошибок, которые смотрят на результат NSURLError
возвращено датаска, и было бы намного чище для меня, если бы я получил NSURLErrorServerCertificateUntrusted
вместо.
Есть ли способ достичь этого? Или эти ошибки сервера будут перенаправляться только тогда, когда аутентификация обрабатывается автоматически, без использования методов делегата?
1 ответ
Будет ли нормальная обработка указанного сертификата потерпеть неудачу с этой ошибкой?
Если это так, вы можете использовать NSURLSessionAuthChallengePerformDefaultHandling в этом случае.
Если нет, то я думаю, что единственный способ - это поиграться с отправителем запроса, что крайне обескураживает, хотя это может не привести к катастрофическим последствиям, если вы вызовете это, а затем вызовете соответствующий обработчик завершения. Однако есть большая вероятность, что вы получите два обратных вызова. Я никогда не пытался это сделать.
Я бы посоветовал подать сообщение об ошибке в Apple с просьбой предоставить правильный API для передачи NSError вместе с отменой.