Mik*_*ike 5 objective-c keychain ios xcode8
一段时间以来,我们一直在努力解决 iOS 应用程序中的一个零星问题,似乎偶尔会启动我们的应用程序,但钥匙串尚无法访问。我们还没有找到可靠地重现这一点的方法。
\n\n与许多应用程序一样,我们使用 kSecAttrAccessible = kSecAttrAccessibleWhenUnlocked 将一些敏感数据(即用户凭据)保存到钥匙串中。应用程序将在启动期间在应用程序委托的 didFinishLaunchingWithOptions 覆盖中从钥匙串中读取这些值。这在大多数情况下都可以正常工作。
\n\n但有时我们的用户会报告无法读取钥匙串值的问题。如果用户只是终止应用程序并重新启动它,这些值仍然存在并且一切正常。我们的应用程序不在后台运行,因此我无法想到除用户操作之外的任何其他操作启动它的情况,这意味着设备已解锁。
\n\n我熟悉 application\xe2\x80\x8bProtected\xe2\x80\x8bData\xe2\x80\x8bDid\xe2\x80\x8bBecome\xe2\x80\x8bAvailable 方法,当设备解锁并且诸如钥匙串之类的受保护数据变得可访问。我想我们可以检查 didFinishLaunchingWithOptions 是否 UIApplication.is\xe2\x80\x8bProtected\xe2\x80\x8bData\xe2\x80\x8bAvailable 为 false,如果是的话,则推迟依赖于钥匙串的应用程序初始化部分application\xe2\x80\x8bProtected\xe2\x80\x8bData\xe2\x80\x8bDid\xe2\x80\x8b成为\xe2\x80\x8b可用方法。我总是对编写解决方案而无法重现和测试它持怀疑态度。
\n\n任何人都可以报告说,他们通过应用程序日志看到了一些实例,其中 iOS 受保护的数据在 didFinishLaunchingWithOptions 方法中尚不可用,但稍后可用?
\n随着 iOS 10.3.2 的发布,我发现我的一些用户也随机发生了这种情况。我们的 OAuth 凭据存储在钥匙串中,每次进行 API 调用时都会访问该钥匙串。如果 OAuth 不存在,我会注销用户,因为设备上有敏感数据。
我检查了isProtectedDataAvailable后台刷新,所以我知道它不会对任何 API 调用进行排队。
和你一样,我真的不想添加检查/等待受保护的数据在前台可用。它违背了拥有的目的kSecAttrAccessibleWhenUnlocked
这是最近发布的有关钥匙串的一个问题,表明解密时间可能是另一个罪魁祸首。https://github.com/evgenyneu/keychain-swift/issues/15
| 归档时间: |
|
| 查看次数: |
1838 次 |
| 最近记录: |