Mam więc stary, wrażliwy klucz dostępu, który obecnie ma dostęp do kSecAttrAccessible When Unlocked i chcę go zaktualizować do kSecAttrAccessibleAfterFirstUnlock.kSecAttrAccessibleAfterFirstUnlock nie zezwalając na dostęp nawet po pierwszym odblokowaniu iOS
Używam Lockbox i nazywają to:
[Lockbox setString:accessKey forKey:self.accessKeyName accessibility:kSecAttrAccessibleAfterFirstUnlock];
co z kolei wywołuje to:
-(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);
}
Jak widać powyżej, kod Lockbox wydaje się starać, aby dodać pozycję jeśli jest duplikat. Umieściłem tam punkt przerwania i mogę potwierdzić, że działa.
Czasami jednak nadal daje błąd:
<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.))
Nie rozumiem dlaczego miałbym być coraz to - ja już odblokowany mój telefon i powinno działać dobrze. Jakieś pomysły?
Powinienem również dodać, że muszę uzyskać do niego dostęp, gdy aplikacja zostanie zabita i przywrócona w tle za pomocą aktualizacji monitorowania regionu.
Hej, czy rozwiązałeś ten problem? Mam do czynienia z bardzo podobnym problemem. Mój dostęp do pęku kluczy zgłasza ten sam błąd, gdy aplikacja zostanie zabita i uruchomiona w tle – SeaJelly
@SeaJelly znalazłeś rozwiązanie? –