iOS SFHFKeychainUtils не удается * иногда * с ошибкой -25308 errSecInteractionNotAllowed - PullRequest
29 голосов
/ 15 марта 2012

У меня есть этот код, возвращающий пароль из цепочки для ключей для данного имени пользователя NSString:

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    

В большинстве случаев для большинства пользователей все работает нормально, но для некоторых конкретных пользователей этот вызов кажетсятерпит неудачу (и продолжает терпеть неудачу), где это возвращает следующую ошибку:

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

Это очевидно errSecInteractionNotAllowed - который из того, что я прочитал, я думаю это означает какое-то взаимодействие с пользователемтребуется для доступа к цепочке ключей.

Кто-нибудь имеет какие-либо идеи, почему этот вызов может быть неудачным только для некоторых конкретных пользователей?Эта запись цепочки для ключей специфична для моего приложения - так почему для доступа к ней требуется какое-либо взаимодействие с пользователем?

Любые указатели высоко ценятся ...

1 Ответ

44 голосов
/ 16 марта 2012

ОК, так что я наконец-то решил это.

В конце концов, я решил, что пользователи, у которых возникли проблемы, установили код блокировки на своем телефоне.Если бы телефон был заблокирован, система цепочки для ключей возвращала эту ошибку -25308.

Если вам когда-либо нужен доступ к цепочке для ключей, только когда приложение активно в forground, вы никогда не увидите эту проблему - но если вам нужнопродолжайте обработку, когда телефон заблокирован или если приложение находится в фоновом режиме, тогда вы увидите его.

В другом месте я бы прочитал, что атрибут доступа по умолчанию для системы кечейна - kSecAttrAccessibleAlways - но я думаю, что он вышелдаты.Кажется, что атрибут доступа по умолчанию для системы цепочки для ключей таков, что, когда телефон заблокирован с помощью пин-кода, элементы недоступны.

Исправление для этого заключается в изменении кода SFHFKeychainUtils для установки определенного атрибута kSecAttrAccessibleна элементах цепочки для ключей, которыми он управляет (что исходный код не сделал - предположительно, поскольку он предшествовал этим атрибутам).

Этот wordpress обновленная версия кода SFHFKeychainUtils содержит исправления в нем- найдите kSecAttrAccessible, чтобы увидеть, где они добавили доступный код атрибута.

Надеюсь, это поможет всем, кто сталкивается с этим ...

...