如何查询 Mac OS X 钥匙串以仅检索会话项目?
当我尝试获取所有这样的项目时:
[SSKeychain accountsForService:nil];
会话项和系统项的键属性完全相同:acct、cdat、class、crtr、labl、mdat、svce
您如何查询钥匙串以仅获取会话项或区分它们?
感谢您的帮助 !
如何查询 Mac OS X 钥匙串以仅检索会话项目?
当我尝试获取所有这样的项目时:
[SSKeychain accountsForService:nil];
会话项和系统项的键属性完全相同:acct、cdat、class、crtr、labl、mdat、svce
您如何查询钥匙串以仅获取会话项或区分它们?
感谢您的帮助 !
您可以像这样查询会话密码(如果您需要所有密码,请替换为。kSecMatchLimitOne
在这种情况下将具有类型):kSecMatchLimitAll
attributes
CFArrayRef
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; }
我通过打开用户钥匙串发现:
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);