如何在iOS设备被锁定时启用对NSURLCredentials的访问?

问题描述:

我正在使用Swagger生成的Swift客户端,它使用NSURLCredentials来与服务器进行身份验证。我正在使用持久性类型.Permanent 我的应用程序在后台与服务器通信并且工作正常,除了当我锁定手机时(我在日志中看到401错误)。我相信NSURLCredential无法在手机锁定时访问钥匙串。 我遇到一些职位,谈论使用kSecAttrAccessibleAfterFirstUnlock启用钥匙串访问。我一直无法弄清楚如何用NSURLCredential来做到这一点。有谁知道是否以及如何配置?如何在iOS设备被锁定时启用对NSURLCredentials的访问?

是的,这正是发生的情况。您有几个选项:

  • 删除底层的钥匙串项目并重新创建它,指定它在设备解锁时应该可访问。这种方法根本不需要使用NSURLCredential。只需使用Keychain Services API创建一个互联网密码项目,证书存储应该自动提取它。
  • 将凭证数据保留在内存中,并在会话委托(或等效的NSURLConnection方法(如果使用该API)中实现URLSession:task:didReceiveChallenge:completionHandler:委托方法)在提问时提供凭证。