2009-04-07 14 views
9

Mac OS X向けの小さなプログラム(Twitterクライアント)をJavaで作成しています。その機能の一部として、Twitterユーザー名/パスワード。自然な場所はMacのキーチェーンですが、私はそれにアクセスする方法を見つけることができません。Javaを使ってMacにユーザー名/パスワードを保存する

JavaからMacキーチェーンにアクセスする方法はありますか、それとも失敗しますか?代わりにユーザー名とパスワードをどこに保存するのがおすすめですか?

答えて

14

OS X backed by the keychainKeyStoreの実装があるという点で、JavaのキーチェーンAPIがあります。

パスワードを保存するには、キーチェーンが最適な場所(の場合はの場所)であると思います。それは良いアルゴリズムで暗号化されており、ユーザーは好きなようにアプリケーションにキーチェーンを利用できるかどうかを自由にすることができ、パスワードはユーザーが保管する他のすべてのパスワードと同じように保存され、構成されます。

+0

私はこれがケビンの答えよりも好きです。時にはあなたがTwitterクライアントを書いたり、パラノイドリンゴのパスワード警告をしたりするからです。キャンセルまたは許可します。キャンセルまたは許可します。 (眺めはほとんどそれを持っていた) – shemnon

+0

私は同じ理由のために、これも好きです。 –

+1

これを試した人はいますか?私はやったし、それはあなたがapple.security.KeychainStoreとSecretKeyを格納することはできないようだ - ソースコードを参照してください。 –

4

これは試していませんが、KeychainStoreというKeyStoreという名前のApple暗号プロバイダ(com.apple.crypto.provider.Apple)で鍵チェーンにアクセスできるようです。


さて、いくつかの実験の後、私はKeychainStoreに秘密鍵–証明書エントリにアクセスすることができました。しかし、私のKeychainのパスワードは表示されませんでした(エイリアスは表示されませんでした)、KeyStore.SecretKeyEntry(パスワードを保持する必要がある)を追加しようとすると、「Key is PrivateKey "明らかに、AppleはSecretKeyEntryをサポートしていません。

キーチェーンを通じてTwitterのパスワードを保護したい場合は、RSAキーペアを生成し、証明書に自己署名し、PrivateKeyEntryをキーチェーンに追加することが最も近いと思います。その後、鍵ペアを使用してTwitterのパスワードを保護することができます。

自分で証明書に署名することは非常に難しいことではありませんが、そのルートに行く場合は、BouncyCastleライブラリでヘルプをチェックしてください。

+0

実際、動作しません。 しかし、JCEKSとKeyStoreとして動作します。詳細は、http://kingsfleet.blogspot.de/2008/12/storing-password-somewhere-safe.html – hendrik

+0

@hendrikを参照してください。はい、JCEKSは常にSecretKeyEntryをサポートしていますが、この質問は特にMac OSの "キーチェーン"機能。 – erickson

+0

汗がかかっていない、いくつかの追加情報を追加したいと同時に、問題を提起し、Java OSXポートリスト - 誰かが知っている、おそらくそれはある時点で実装される。 – hendrik

3

OAuthサポートのtwitters APIページをご覧ください。 OAuthを使うことで、ユーザーのtwitterパスワードを知る必要はありません。

http://apiwiki.twitter.com/OAuth-FAQ

+0

それは素晴らしいです!私はそれをもっと調べなければなりませんが、パスワードを保存するよりもはるかに良い解決策のように思えます。 – Zarkonnen

+0

喜んで助けてください。私はそれがあなたのために働くことを望む。 –

+0

もしそうなら、あなたは明らかに最高の答えを得るでしょう。 – Zarkonnen

関連する問題