2012-03-15 11 views
25

mam ten kod wracając hasło z pęku kluczy dla danej nazwy użytkownika NSString:iOS SFHFKeychainUtils upadających * czasami * z błędem -25308 errSecInteractionNotAllowed

NSError *error = nil; 
NSString *appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey]; 
NSString *pw = [SFHFKeychainUtils getPasswordForUsername:username andServiceName:appName error:&error]; 
if(error != nil) 
    // log the error  

Większość czasu dla większości użytkowników to wszystko działa dobrze - ale dla niektórych konkretnych użytkowników to wezwanie wydaje się nie powiedzie (i nosić na braku), gdzie zwraca następujący błąd:

The operation couldn’t be completed. (SFHFKeychainUtilsErrorDomain error -25308.) 

to widocznie errSecInteractionNotAllowed - co z tego co czytałem myślę oznacza to, że wymagany jest pewien rodzaj interakcji użytkownika, aby uzyskać dostęp do pęku kluczy.

Czy ktoś ma pojęcie, dlaczego to połączenie może zawodzić tylko dla niektórych użytkowników? Ten wpis z pękiem kluczy jest charakterystyczny dla mojej aplikacji - dlaczego więc interakcja z użytkownikiem była wymagana, aby uzyskać do niego dostęp?

Wszelkie wskazówki znacznie ceniona ...

Odpowiedz

40

OK więc pracował to się w końcu.

W końcu dowiedziałem się, że użytkownicy, którzy mieli problemy, ustawili kod blokady na swoim telefonie. Jeśli telefon był zablokowany, system pęków kluczy zwrócił ten błąd -25308.

Jeśli potrzebujesz tylko dostępu do pęku kluczy, gdy aplikacja jest aktywna w terenie, nigdy nie zobaczysz tego problemu - ale jeśli musisz kontynuować przetwarzanie, gdy telefon jest zablokowany lub aplikacja jest w tle, zobaczy to.

W innym miejscu przeczytałbym, że domyślny atrybut dostępu do systemu kechain to kSecAttrAccessibleAlways - ale myślę, że jest nieaktualny. Wygląda na to, że domyślny atrybut dostępu do systemu pęku kluczy jest taki, że gdy telefon jest zablokowany kodem PIN, elementy są niedostępne.

Rozwiązaniem tego jest to, aby zmienić kod SFHFKeychainUtils aby ustawić określony atrybut kSecAttrAccessible na breloku przedmiotów, którymi zarządza (co oryginalny kod nie robić - prawdopodobnie ponieważ wstępnie datowanych te atrybuty).

To słowo kluczowe updated version kodu SFHFKeychainUtils zawiera poprawki - wyszukaj kSecAttrAccessible, aby zobaczyć, gdzie dodano dostępny kod atrybutu.

Nadzieja to pomaga ktoś działa w ten ...

+2

I zostały zweryfikowane to na iOS4, iOS5 i iOS6. We wszystkich wersjach systemu iOS zwracany jest kod błędu errSecInteractionNotAllowed, jeśli dane, które nie są oznaczone kSecAttrAccessibleAlways, są odczytywane, gdy urządzenie jest w stanie zablokowania (np. Zadania w tle, pobieranie Kiosku itp.). –

+5

kSecAttrAccessibleAlways nie jest świetnym wyborem - możesz uzyskać więcej korzyści związanych z bezpieczeństwem i nadal unikać błędu, używając czegoś takiego jak kSecAttrAccessibleAfterFirstUnlock (lub jeszcze bardziej restrykcyjnego ustawienia, jeśli działa to dla twojej aplikacji). – frankodwyer

+0

Mogę potwierdzić, że kiedy aplikacja jest na pierwszym planie, ale urządzenie jest zablokowane hasłem, biblioteka pęku kluczy daje mi -25308. Dzięki ! – Magurizio

Powiązane problemy