Cocoa интерфейс к MacOS X Keychain

У меня есть немного кода Mac, который должен хранить, получать доступ и обновлять пароли, чтобы подключать пользователей к веб-API. Правильное место для размещения этой информации должно быть Mac Keychain, но, похоже, нет интерфейса cocoa (см. этот ответ) - это все еще правильно?

Я смотрел Apple Документация по цепочке ключей, и API кажется невероятно неуклюжим. Я могу хранить его и извлекать записи, но что-то более сложное, по-видимому, требует много размышлений о том, что может пойти не так (см. этот список кодов ошибок).

Есть ли лучший интерфейс к цепочке ключей Mac, помимо пробоя через код C? Самое близкое, что я пришел, это EMKeychain, но похоже, что ему нужна небольшая работа (например, код ошибки не исключается, консоль).

Ответы

Ответ 1

Вы должны взглянуть на SSKeychain. Отличный, потрясающий код.

Ответ 2

Слишком поздно ответить, но будет полезно для будущей помощи. Ниже я сделал, чтобы сохранить пароль в Keychain of Mac

#pragma -mark Password save in Keychain

-(NSURLProtectionSpace *)createProtectionSpaceForBasicAuthentication{

    NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc]
                                             initWithHost:@"http://yourURLHere"
                                             port:1804  //add Your port here
                                             protocol:@"http" //can be pass as nil 
                                             realm:nil
                                             authenticationMethod:NSURLAuthenticationMethodHTTPBasic];
    return protectionSpace;
}

-(void )createCredentialForUsername:(NSString *)username Password:(NSString *)password{

    NSURLCredential *credentialObject;
    credentialObject = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
    [[NSURLCredentialStorage sharedCredentialStorage] setCredential:credentialObject forProtectionSpace:[self createProtectionSpaceForBasicAuthentication]];
}

Для сохранения пароля

- (IBAction)saveButtonClicked:(id)sender {
    [self createCredentialForUsername:@"User_Name" Password:@"Your_Pass"];
}

для получения пароля

NSURLCredential *credential;
NSDictionary *credentials;
credentials = [[NSURLCredentialStorage sharedCredentialStorage] credentialsForProtectionSpace:[self createProtectionSpaceForBasicAuthentication]];
credential = [credentials.objectEnumerator nextObject];
    NSLog(@"Username: %@ and password %@", credential.user, credential.password);

Когда мы запустим приложение для получения пароля, мы получим приглашение пользователя для доступа к keychain.