2012-03-25 4 views
15

사용자에게 웹 API를 연결하기 위해 비밀번호를 저장, 액세스 및 업데이트해야하는 Mac 코드가 있습니다. 이 정보를 입력 할 수있는 적절한 장소는 Mac Keychain이어야하지만 코코아 인터페이스 (this answer 참조)가없는 것 같습니다. 여전히 맞습니까?MacOS X 코코아 인터페이스 X 키 체인

저는 Apple의 Keychain documentation을 살펴 봤는데 API가 엄청나게 복잡해 보입니다. 나는 그것을 저장할 수 있고 레코드를 가져올 수 있지만 더 복잡한 것은 무엇이 잘못 될지에 대해 많은 생각을 요구하는 것 같습니다 (this list of error codes 참조).

C 코드를 벗어나는 것 외에 Mac 키 체인에 더 좋은 인터페이스가 있습니까? 가장 가까운 것은 EMKeychain이지만 약간의 작업이 필요합니다 (예 : 콘솔에 침을 뱉어내는 대신 오류 처리 코드 없음).

답변

10

SSKeychain을 살펴보십시오. 멋지고 훌륭한 코드가 작동합니다.

+0

인터넷 암호가 제네릭 암호 시스템보다 설정에 약간 더 적합하다고 생각했지만 작동 할 수 있습니다. SSKeychain이 식별자로 사용하는 "서비스"에 URL을 인코딩 할 수있을 것 같습니다. 내 목적을 위해 더 좋은 점이 없다면 적어도 인터넷 암호를 사용하여 시스템을 구성하려는 경우 출발점입니다. – Noah

0

너무 늦기는하지만 나중에 도움이 될 것입니다. 아래는 우리가 암호를 가져 응용 프로그램을 실행하면 암호

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

를 가져 오는에 대한 암호

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

저장을위한

#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]]; 
} 

의 키 체인에 암호를 저장 한 것입니다, 우리는 키 체인 접근을위한 사용자 행동 프롬프트를 얻을 것입니다.

관련 문제