热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从Keychain检索数据时,有一小部分用户获得errSecItemNotFound

如何解决《从Keychain检索数据时,有一小部分用户获得errSecItemNotFound》经验,为你挑选了1个好方法。

我有一个iOS应用程序,在Keychain中存储访问令牌.在过去的几个月里,我注意到大约2%的用户在尝试检索令牌时获得了errSecItemNotFound.

所有相关的StackOverflow线程都指向后台任务是罪魁祸首(iOS KeyChain不从后台检索值)或在查询字符串中包含无效参数(Keychain:Item报告为errSecItemNotFound,但在添加时接收errSecDuplicateItem).

我正在使用kSecAttrAccessibleAfterFirstUnlock,因此后台任务应该能够正常访问Keychain.

此外,搜索查询如下所示:

NSMutableDictionary *query = [[NSMutableDictionary alloc] init];
[query setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass];
[query setObject:(__bridge id)kCFBooleanTrue forKey:(__bridge id)kSecReturnData];
[query setObject:(__bridge id)kSecMatchLimitOne forKey:(__bridge id)kSecMatchLimit];
[query setObject:service forKey:(__bridge id)kSecAttrService];
[query setObject:key forKey:(__bridge id)kSecAttrGeneric];
[query setObject:key forKey:(__bridge id)kSecAttrAccount];

(设置kSecAttrGeneric可能是多余的,但它不会影响查询的结果)

为了记录,我遇到了SSKeyChain和UICKeychainStore的这个错误.

任何提示都将受到高度赞赏:]



1> Rory McKinne..:

我正在使用KDJKeychainItemWrapper并遇到类似的问题.最后,我将其替换为使用kSecAttrGeneric来使用kSecAttrService.这修复了由于未定义服务而未查找条目和重复的所有问题.

我相信kSecClassGenericPassword的主键只是kSecAttrAccount和kSecAttrService.

如果你不使用kSecAttrGeneric,它应该排除自己,也许用户必须再次输入密码.

同时选择一个不会与其他任何东西冲突的服务名称.


推荐阅读
author-avatar
小刺猬HF
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有