2012-03-25 32 views
15

Web APIを使用してユーザーを接続するために、パスワードの保存、アクセス、更新が必要なMacコードがあります。この情報を格納する適切な場所は、Mac Keychainであるべきですが、ココアインターフェース(this answer参照)がないようです - これはまだ正しいですか?MacOS XのキーチェーンへのCocoaインターフェイス

私は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]]; 
} 

マック

のキーチェーンにパスワードを保存するためにやったことで、私たちはキーチェーンアクセスのためのユーザーアクションのプロンプトを得るでしょう。

関連する問題