【问题标题】:Can no longer authenticate with AFNetworking/NSURLConnection with iOS10?iOS10 无法再通过 AFNetworking/NSURLConnection 进行身份验证?
【发布时间】: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。我们可以尝试将其作为根本原因的一种可能性消除吗?
  • 是的,让我试试。我看到其他人有同样的问题(通过谷歌)。谢谢,我会尽快回复您。

标签: rest nsurlconnection afnetworking-2 afnetworking-3


【解决方案1】:

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

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

【讨论】:

  • 我能够让应用程序与 ATS 覆盖一起工作。我使用ssllabs.com/ssltest/index.html 查看有问题的服务器并确定我们需要进行哪些修复。与管理员合作完成这项工作。感谢您的澄清。
猜你喜欢
  • 2012-04-01
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 2017-08-31
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
相关资源
最近更新 更多