3

如何查询 Mac OS X 钥匙串以仅检索会话项目?

当我尝试获取所有这样的项目时:

[SSKeychain accountsForService:nil];

会话项和系统项的键属性完全相同:acct、cdat、class、crtr、labl、mdat、svce

您如何查询钥匙串以仅获取会话项或区分它们?

感谢您的帮助 !

4

2 回答 2

0

您可以像这样查询会话密码(如果您需要所有密码,请替换为。kSecMatchLimitOne在这种情况下将具有类型):kSecMatchLimitAllattributesCFArrayRef

NSDictionary* passwordQuery = @{
    (__bridge id)kSecAttrService : sessionServiceName,
    (__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword,
    (__bridge id)kSecReturnAttributes: (__bridge id)kCFBooleanTrue,
    (__bridge id)kSecReturnData: (__bridge id)kCFBooleanTrue,
    (__bridge id)kSecMatchLimit : (__bridge id)kSecMatchLimitOne
};

CFTypeRef attributes = nil;
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)passwordQuery, &attributes);
if (status != 0){
    return nil;
 }
于 2013-08-08T15:55:16.127 回答
0

我通过打开用户钥匙串发现:

NSArray *path = [NSHomeDirectory() pathComponents];
NSString *keychainPath = [NSString stringWithFormat:@"%@%@/%@%@",path[0],path[1],path[2],@"/Library/Keychains/login.keychain"];
SecKeychainRef ref = NULL;
SecKeychainOpen([keychainPath UTF8String],&ref);
于 2013-08-15T20:15:54.740 回答