两个共享钥匙串数据的应用程序在iOS模拟器中运行良好,但在设备中无效

时间:2013-06-07 08:17:58

标签: ios keychain security-framework

我正在尝试使用具有相同标识符(相同配置文件)的另一个应用程序访问应用程序设置的钥匙串数据。我使用 this link来实现这一目标。

正确地保存了钥匙串数据,我得到以下声明的errSecSuccess(在模拟器和设备中)

OSStatus status = SecItemAdd((CFDictionaryRef)dictionary, NULL);

到目前为止一切顺利,但是当我尝试取回我的应用A在另一个应用B中保存的凭据时,它在模拟器和设备中的工作方式不同。

在iOS模拟器6.1中,我对以下语句的状态为“0”。

 OSStatus status = SecItemCopyMatching((CFDictionaryRef)searchDictionary, &foundDict);

在任何iOS设备中,我的状态都是'-25300'。

我知道这些是安全框架中的错误代码:

//errSecSuccess                = 0,       /* No error. */
//errSecUnimplemented          = -4,      /* Function or operation not implemented. */
//errSecParam                  = -50,     /* One or more parameters passed to a function where not valid. */
//errSecAllocate               = -108,    /* Failed to allocate memory. */
//errSecNotAvailable           = -25291,  /* No keychain is available. You may need to restart your computer. */
//errSecDuplicateItem          = -25299,  /* The specified item already exists in the keychain. */
//errSecItemNotFound           = -25300,  /* The specified item could not be found in the keychain. */
//errSecInteractionNotAllowed  = -25308,  /* User interaction is not allowed. */
//errSecDecode                 = -26275,  /* Unable to decode the provided data. */
//errSecAuthFailed             = -25293,  /* The user name or passphrase you entered is not correct. */

我得到的项目未找到,但为什么设备和模拟器不同。

1 个答案:

答案 0 :(得分:2)

据我所知,您在应用程序中处理的Keychain组默认情况下不会在系统上的其他应用程序中共享。如果是这种情况,则意味着如果您设法找到另一个应用程序的组,您可以窃取他们的私钥匙链项,从而使Keychain提供的安全性无效。

因此,有一个概念被称为钥匙串访问组,允许公开定义您希望在您的应用程序中共享的钥匙串组。 documentation州:

  

启用钥匙串共享可让您的应用分享密码   与您的团队开发的其他应用程序的钥匙串

请注意,您只能与来自同一开发者的其他应用程序(即您的其他应用程序)共享钥匙串项目。