ios keychain sfhfkeychainutils

iOS SFHFKeychainUtils falla*a veces*con error-25308 errSecInteractionNotAllowed



(1)

Tengo este código para recuperar una contraseña del llavero para un nombre de usuario determinado 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

La mayoría de las veces, para la mayoría de los usuarios, todo esto funciona bien, pero para algunos usuarios específicos, esta llamada parece fallar (y continúa fallando), donde devuelve el siguiente error:

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

Aparentemente, esto es errSecInteractionNotAllowed, que, por lo que he leído, creo que esto significa que se requiere algún tipo de interacción del usuario para acceder al llavero.

¿Alguien tiene alguna idea de por qué esta llamada puede estar fallando solo para algunos usuarios específicos? Esta entrada de llavero es específica para mi aplicación, ¿por qué se requiere cualquier interacción del usuario para acceder a ella?

Cualquier punteros muy apreciados ...


OK, así que resolví esto finalmente.

Finalmente, resolví que los usuarios que tenían problemas habían establecido un código de bloqueo en su teléfono. Si el teléfono estaba bloqueado, el sistema de llavero estaba devolviendo este error -25308.

Si solo necesita acceder al llavero cuando la aplicación está activa en primer plano, nunca verá este problema, pero si necesita continuar con el procesamiento cuando el teléfono está bloqueado o si la aplicación está en segundo plano, entonces la verá.

En otro lugar, había leído que el atributo de acceso predeterminado para el sistema kechain es kSecAttrAccessibleSiempre, pero creo que está desactualizado. Parece que el atributo de acceso predeterminado para el sistema de llavero es tal que cuando el teléfono está bloqueado con un código pin, entonces los elementos no están disponibles.

La solución para esto es cambiar el código SFHFKeychainUtils para establecer un atributo kSecAttrAccessible específico en los elementos de llavero que administra (lo que no hizo el código original, probablemente como precede a estos atributos).

Esta versión actualizada de wordpress del código SFHFKeychainUtils tiene las correcciones en él: busque kSecAttrAccessible para ver dónde han agregado el código de atributo accesible.

Espero que esto ayude a alguien más a encontrarse con esto ...