2015-01-20 4 views
5

키 체인에 액세스 토큰을 저장하는 iOS 앱이 있습니다. 지난 몇 달 동안 토큰 검색을 시도 할 때 약 2 %의 사용자가 errSecItemNotFound을 얻는 것으로 나타났습니다.키 체인에서 데이터를 검색 할 때 errSecItemNotFound를받는 사용자의 비율이 낮음

모든 관련 StackOverflow 스레드는 원인이되는 백그라운드 작업 (iOS KeyChain not retrieving values from background) 또는 쿼리 문자열 (Keychain: Item reported as errSecItemNotFound, but receive errSecDuplicateItem on addition)에 유효하지 않은 매개 변수를 포함합니다.

저는 kSecAttrAccessibleAfterFirstUnlock을 사용하고 있습니다. 백그라운드 작업은 키 체인에 액세스 할 수 있어야합니다. 나는

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 설정은 아마 중복이지만, 어쨌든 쿼리의 결과에 영향을주지 않습니다)

기록을 위해

을 :

또한, 검색 쿼리는 다음과 같습니다 이 버그는 SSKeyChainUICKeychainStore 모두 발생했습니다. 내가 KDJKeychainItemWrapper을 사용했다

+0

안녕하세요 !! 나는 exacly 같은 문제가있어 ... UICKeyChainStore lib이 해결합니까? 감사!! – Jovem

답변

4

]와 비슷한 문제가 있었다 :

어떤 힌트 매우 감사하겠습니다. 결국 kSecAttrService를 사용하기 위해 kSecAttrGeneric의 사용을 교체했습니다. 이것은 서비스가 정의되지 않아서 항목과 중복을 찾지 못하는 문제를 해결했습니다.

kSecClassGenericPassword의 기본 키는 단지 kSecAttrAccount 및 kSecAttrService입니다.

kSecAttrGeneric을 사용하지 않으면 사용자가 암호를 다시 입력해야하는 경우가 있습니다.

다른 서비스와 충돌하지 않는 서비스 이름을 선택하십시오.

+0

이미 kSecAttrService (kSecAttrService + kSecAttrAccount + kSecAttrGeneric)도 이미 사용하고 있습니다. 추가 (및 중복) kSecAttrGeneric 특성을 무시하면 안됩니까? – mgv

+0

키가 해당 계정 인 것처럼 보이고 서비스는 쌍으로 고유해야합니다. 그렇지 않으면 덮어 쓰거나 다른 곳에서 제거되는 위험을 감수해야합니다. 나는 원래 이걸 본 곳을 추적했다. http://useyourloaf.com/blog/2010/04/28/keychain-duplicate-item-when-adding-password.html –

+0

당신은 그렇다. 3 AttrGeneric을 무시한 경우에도 AttrGeneric을 AttrAccount와 동일한 값으로 설정해야합니다. 귀하의 오류가 발견되지 않는 것 같으면, 그 항목이 다른 곳으로 변경되었음을 암시 할 수 있습니다. AttrService 키 값이 고유 한 값입니까? 어떤 식 으로든 그것이 업데이트 될 때 말하거나 손상 될 수있는 설정이 될 수 있습니다. 그러면 다음 번에 질의가 실패 할 것입니다. –