我正在创建一个钥匙串,然后向其中添加一个带有预定义的受信任应用程序列表的项目:
SecKeychainCreate([keychainPath UTF8String], (UInt32)strlen(keychainPass), keychainPass, FALSE, NULL, &someKeychain);
OSStatus someStatus = SecKeychainItemCreateFromContent(kSecGenericPasswordItemClass, &list, len, encryptedPass, someKeychain, accessRef, &someKeychainItem);
当我使用 Keychain Access 应用程序打开新创建的钥匙串时,我可以在受信任的应用程序列表中看到我的应用程序:
问题是,当我尝试通过一个受信任的应用程序从该钥匙串中读取密钥时
SecKeychainUnlock(someKeychain, (UInt32)strlen(keychainPass), keychainPass, TRUE);
UInt32 passwordLen = 0;
void *passData = nil;
const char *cUser_name = [NSUserName() cStringUsingEncoding:NSUTF8StringEncoding];
OSStatus genericPassErr = SecKeychainFindGenericPassword(someKeychain, 0, NULL, strlen(cUser_name), cUser_name, &passwordLen, &passData, NULL);
genericPassErr
等于-25293
,这意味着
Error: 0xFFFF9D33 -25293 The user name or passphrase you entered is not correct.
在代码的前面,我运行SecKeychainSetUserInteractionAllowed(0)
,如果我注释掉这一行,系统会提示我允许应用程序访问钥匙串,如果我授予它,一切运行正常。但是,重点是我需要能够在不提示用户的情况下做到这一点。我希望它能够像这样工作,因为我将应用程序添加到 ACL。你知道我做错了什么吗?
当我在附加的屏幕截图中勾选“所有程序都可以访问此项目”单选框时,一切都没有提示。但我不希望每个人都能够访问它,只是列出的应用程序。