Ответ 1
Вы должны взглянуть на SSKeychain. Отличный, потрясающий код.
У меня есть немного кода Mac, который должен хранить, получать доступ и обновлять пароли, чтобы подключать пользователей к веб-API. Правильное место для размещения этой информации должно быть Mac Keychain, но, похоже, нет интерфейса cocoa (см. этот ответ) - это все еще правильно?
Я смотрел Apple Документация по цепочке ключей, и API кажется невероятно неуклюжим. Я могу хранить его и извлекать записи, но что-то более сложное, по-видимому, требует много размышлений о том, что может пойти не так (см. этот список кодов ошибок).
Есть ли лучший интерфейс к цепочке ключей Mac, помимо пробоя через код C? Самое близкое, что я пришел, это EMKeychain, но похоже, что ему нужна небольшая работа (например, код ошибки не исключается, консоль).
Вы должны взглянуть на SSKeychain. Отличный, потрясающий код.
Слишком поздно ответить, но будет полезно для будущей помощи. Ниже я сделал, чтобы сохранить пароль в 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.