0

当我连接到需要客户端证书的 SSO X509 连接时,我提供了凭据并且它成功了。下次点击 didReceiveChallenge 委托方法时,auth 方法是 NSURLAuthenticationMethodServerTrust ,我有以下代码用于此 authMethod

completionHandler(NSURLSessionAuthChallengeUseCredential,[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);

对于下一个请求,我再次将 authMethod 作为 NSURLAuthenticationMethodClientCertificate。

所以基本上对于每个请求,委托方法都会被命中两次,一次使用 authMethod 作为 NSURLAuthenticationMethodClientCertificate,第二次使用 authMethod NSURLAuthenticationMethodServerTrust

我不想为每个请求重复获取 authMethod 作为 NSURLAuthenticationMethodClientCertificate 。

这是什么原因以及如何避免呢?每次验证都会影响性能

4

1 回答 1

0

我知道你需要做三件事来避免这个问题:

  • NSURLSession尽可能重用会话。套接字和 TLS 会话缓存都不会从一个会话共享到另一个会话,因此如果您不重用会话,您将受到对每个请求的全面身份验证的打击。
  • 确保您的服务器正确支持重新连接到现有会话并配置为允许这样做。
  • 尽可能使用 Wi-Fi。IIRC,出于电源管理的原因,操作系统在蜂窝网络上比在 Wi-Fi 上更积极地终止连接。您不一定会因为您创建了一个新连接而受到完整的身份验证周期的影响(TLS 缓存通常允许您重新连接到服务器上现有的 TLS 会话),但这种情况更有可能发生。

如果这些方法都没有帮助,请打开 DTS 事件,Quinn 或 Rich 可以帮助您调试问题。:-)

于 2017-12-16T05:01:20.980 回答