2016-09-20 11 views
1

Мое приложение использует AFNetworking 2.x для получения данных из базы данных на одном из наших серверов. Все прошло отлично до этой недели или около того. Теперь мы не можем получить хотя бы одно из наших соединений для работы. Вот код.Больше не может аутентифицироваться с помощью AFNetworking/NSURLConnection с iOS10?

NSString *loginURL = 
     @"https://<server>/<path>/<url>"; 
    AFHTTPRequestOperationManager *manager = 
     [AFHTTPRequestOperationManager manager]; 
    manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
    [manager.requestSerializer 
     setAuthorizationHeaderFieldWithUsername:pUserEmail 
            password:pUserPassword]; 
    manager.responseSerializer = [AFJSONResponseSerializer serializer]; 

    AFHTTPRequestOperation *operation = [manager GET:loginURL 
     parameters:[self jsonDict] 
     success:^(AFHTTPRequestOperation *operation, id responseObject) { 
      if (completionBlock) { 
      completionBlock(YES); 
      } 
     } 
     failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
      if (completionBlock) { 
      completionBlock(NO); 
      } 
     }]; 
    [operation start]; 
} 

Что действительно странно для меня, что если я иду в URL в браузере и введите на имя пользователя/пароль, я получаю доступ.

Если я пользователь Xcode 7.3.1 и запускаюсь в симуляторе, то я получаю доступ.

Если я запускаю его на своем iPhone, он терпит неудачу, и я получаю следующие 3 сообщения об ошибках.

Sep 20 10:54:54 iPhone Scoular(CFNetwork)[1999] <Notice>: N -9801 
(kCFStreamErrorDomainSSL, -9801) 
Sep 20 10:54:54 iPhone Scoular(CFNetwork)[1999] <Error>: HTTP load failed (error code: -1200 [3:-9801]) 
Sep 20 10:54:54 iPhone Scoular(CFNetwork)[1999] <Error>: NSURLConnection finished with error - code -1200 

Я думаю, что что-то (NSURLConnection в iOS8 или iOS9) не рекомендуется, с iOS10, он больше не допускается, и если я обновлю к AFNetworking 3.x будет решить эту проблему, но я не являюсь абсолютно уверен.

Пользователь с iOS9 может аутентифицироваться.

Я не верю, что на сервере произошли какие-либо изменения.

+1

с ios10 NSAppTransportSecurity NSAllowsArbitraryLoads требуется, чтобы быть правдой. Это указано в вашем проекте? –

+0

Нет. Это идет в моем plist? –

+0

Но зачем он работал в симуляторе? –

ответ

1

В iOS 10 некоторые комплекты шифров отключены из-за слабой безопасности, которые разрешены только в веб-представлениях. Вы можете или не сможете переопределить это с переопределением безопасности Apple Transport в файле Info.plist.

В любом случае, даже если переопределение работает, вам придется обновить сервер к концу 2016 года, поэтому не тратьте слишком много времени на то, чтобы выполнить эту работу.

+0

Мне удалось заставить приложение работать с переопределением ATS. Я использовал https://www.ssllabs.com/ssltest/index.html, чтобы посмотреть на сервер, о котором идет речь, и определить, какие исправления нам нужно сделать. Работайте с администратором, чтобы это сделать. Спасибо за ваше разъяснение. –