Как вы обрабатываете ошибку 401 при использовании willSendRequestForAuthenticationChallenge?

#ios #objective-c #xcode #authentication #nsurlconnection

#iOS #objective-c #xcode #аутентификация #nsurlconnection

Вопрос:

Я использую предпочтительный метод Apple для решения проблем аутентификации NTLM через NSURLConnection через willSendRequestForAuthenticationChallenge. Я пытаюсь определить, как поступать в ситуациях, когда вызов по существу завершается неудачей (например, если пароль пользователя изменился или это первый раз, когда пользователь когда-либо делал запрос веб-службы со своего устройства), и теперь приложению необходимо обработать получение нового пароля и повторную попытку запроса URL.

Но я застрял.

Вот что я пытаюсь сделать. Выполняя некоторые базовые тесты, я сначала удаляю хранилище учетных данных, чтобы я мог притвориться, что пользователь впервые отправляет запрос на URL-адрес, который необходимо аутентифицировать. Я вызываю с помощью [вызов performDefaultHandlingForAuthenticationChallenge], который, как я ожидаю, каким-то образом завершится неудачей, поскольку в хранилище еще нет учетных данных. Ну, я неожиданно получаю ответ обратно в didReceiveData, в котором ошибка аутентификации 401 скрыта в строке ответа HTML; однако она замаскирована под данные, полученные с моего URL (запрос веб-службы). Если я выполняю последующий вызов и наблюдаю [вызов previousFailureCount], он по-прежнему равен 0 (и я думаю, я знаю почему; У меня все еще нет никаких учетных данных, сохраненных в хранилище учетных данных).

Как мне правильно справиться с ошибкой 401 без необходимости анализировать данные ответа? Я бы подумал, что 401 был бы автоматически распознан NSURLConnection и позволил бы мне каким-то образом его увидеть.