Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS save multiple passwords in keychain

Tags:

keychain

ios5

I want to save two passwords (one app pin and one backend pin) in my keychain and am wondering how this should work.
I am using the KeychainItemWrapper with to different identifiers.

KeychainItemWrapper *kcw1 = [[KeychainItemWrapper alloc] initWithIdentifier:id1 accessGroup:nil];
KeychainItemWrapper *kcw2 = [[KeychainItemWrapper alloc] initWithIdentifier:id2 accessGroup:nil];

and I am using either one to save and retrive the app or the backend pin.

I use :

[self.kcw1 setObject:aVerifyCode forKey:(__bridge id) kSecValueData]
[self.kcw2 setObject:aAppPin forKey:(__bridge id) kSecValueData]

But it doesn't work - result is -25299 - The specified item already exists in the keychain

So how can I save multiple passwords in my keychain?

like image 850
Alexander Avatar asked Jun 15 '12 17:06

Alexander


1 Answers

Okay I think I know what the problem is! KeychainItemWrapper uses the identifier for the kSecAttrGeneric.
But this is not the one to distinguish entries. If you want to save two accounts or two passwords in

kSecValueData

this will result in an arror (-25299) for duplicate entires.
The reason is, that the apple keychain api uses

kSecAttrAccount

and

kSecAttrService

to distinguish entries.
So you can modify the keychainItemWraper if you want like shown in this thread

like image 102
Alexander Avatar answered Oct 10 '22 16:10

Alexander