[英]kSecAttrAccessibleAfterFirstUnlock not allowing access even after first unlock iOS
因此,我有一個舊的敏感訪問密鑰,當前具有對kSecAttrAccessibleWhenUnlocked的可訪問性,我想將其更新為kSecAttrAccessibleAfterFirstUnlock。
我正在使用Lockbox並稱其為:
[Lockbox setString:accessKey forKey:self.accessKeyName accessibility:kSecAttrAccessibleAfterFirstUnlock];
依次將其稱為:
-(BOOL)setObject:(NSString *)obj forKey:(NSString *)key accessibility:(CFTypeRef)accessibility
{
OSStatus status;
NSString *hierKey = [self _hierarchicalKey:key];
// If the object is nil, delete the item
if (!obj) {
NSMutableDictionary *query = [self _query];
[query setObject:hierKey forKey:(LOCKBOX_ID)kSecAttrService];
status = SecItemDelete((LOCKBOX_DICTREF)query);
return (status == errSecSuccess);
}
NSMutableDictionary *dict = [self _service];
[dict setObject: hierKey forKey: (LOCKBOX_ID) kSecAttrService];
[dict setObject: (LOCKBOX_ID)(accessibility) forKey: (LOCKBOX_ID) kSecAttrAccessible];
[dict setObject: [obj dataUsingEncoding:NSUTF8StringEncoding] forKey: (LOCKBOX_ID) kSecValueData];
status = SecItemAdd ((LOCKBOX_DICTREF) dict, NULL);
if (status == errSecDuplicateItem) {
NSMutableDictionary *query = [self _query];
[query setObject:hierKey forKey:(LOCKBOX_ID)kSecAttrService];
status = SecItemDelete((LOCKBOX_DICTREF)query);
if (status == errSecSuccess)
status = SecItemAdd((LOCKBOX_DICTREF) dict, NULL);
}
if (status != errSecSuccess)
DLog(@"SecItemAdd failed for key %@: %d", hierKey, (int)status);
return (status == errSecSuccess);
}
如您在上方所見,如果有重復項,密碼箱代碼似乎會嘗試添加該項。 我在此處放置了一個斷點,可以確認它確實有效。
但是,有時仍然會出現以下錯誤:
<Error>: SecOSStatusWith error:[-25308] The operation couldn’t be completed. (OSStatus error -25308 - Remote error : The operation couldn‚Äôt be completed. (OSStatus error -25308 - ks_crypt: e00002e2 failed to unwrap item (class 6, bag: 0) Access to item attempted while keychain is locked.))
我不明白為什么會得到這個-我已經解鎖了手機,它應該可以正常工作。 有任何想法嗎?
我還應該補充一點,當應用程序被殺死並通過區域監視更新在后台恢復時,我需要訪問它。
我必須在新密鑰之前先清除舊密鑰。 您可以執行此操作,也可以使用新的kSecAccessibility值創建一個具有不同名稱的新密鑰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.