iOS10 无法再通过 AFNetworking/NSURLConnection 进行身份验证?

Posted

技术标签:

【中文标题】iOS10 无法再通过 AFNetworking/NSURLConnection 进行身份验证?【英文标题】:Can no longer authenticate with AFNetworking/NSURLConnection with iOS10? 【发布时间】:2016-09-20 17:12:12 【问题描述】:

我的应用使用 AFNetworking 2.x 从我们其中一台服务器上的数据库中获取数据。直到上周左右,一切都运行良好。现在,我们至少无法让我们的一个连接正常工作。这是代码。

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

我的猜测是某些东西(ios8 或 iOS9 中的 NSURLConnection)已被弃用,在 iOS10 中不再允许,如果我更新到 AFNetworking 3.x 它将解决这个问题,但我不完全确定。

使用 iOS9 的用户能够进行身份验证。

我认为服务器没有任何变化。

【问题讨论】:

with ios10 NSAppTransportSecurityNSAllowsArbitraryLoads 必须为真。是否在您的项目中指定? 没有。这会在我的 plist 中吗? 但为什么它会在模拟器中工作? hmm.. 在 info.plist 中必须将其设置为 true。我们可以尝试将其作为根本原因的一种可能性消除吗? 是的,让我试试。我看到其他人有同样的问题(通过谷歌)。谢谢,我会尽快回复您。 【参考方案1】:

在 iOS 10 中,由于安全性较弱,某些密码套件被禁用,仅允许在 Web 视图中使用。您可能会也可能无法使用 Info.plist 文件中的 Apple Transport Security 覆盖来覆盖它。

无论哪种方式,即使覆盖有效,您也必须在 2016 年底之前升级服务器,因此不要花费太长时间来尝试使其正常工作。

【讨论】:

我能够让应用程序与 ATS 覆盖一起工作。我使用ssllabs.com/ssltest/index.html 查看有问题的服务器并确定我们需要进行哪些修复。与管理员合作完成这项工作。感谢您的澄清。

以上是关于iOS10 无法再通过 AFNetworking/NSURLConnection 进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

使用 AFNetworking、ios 上传图片

AFNetworking 和 IPV6 拒绝 iOS

无法在 iOS 应用程序中使用 AFNetworking

AFNetworking 在 iOS 6 下停止工作

iOS AFNetWorking中block执行完后再执行其它操作

iOS开发-AFNetworking