2009-04-07 5 views
9

Je suis en train d'écrire un petit programme (un client Twitter) en Java, destiné à Mac OS X. Dans le cadre de ses fonctionnalités, il doit avoir un emplacement pour stocker le nom d'utilisateur mot de passe. L'endroit naturel serait le mac keychain, mais je ne trouve aucun moyen d'y accéder.Enregistrement du nom d'utilisateur/mot de passe sur Mac en utilisant Java

Existe-t-il un moyen d'accéder au trousseau de clés mac à partir de Java, ou à défaut, quelle est votre recommandation pour où stocker le nom d'utilisateur/mot de passe à la place?

Répondre

14

Il existe une API de trousseau Java, en ce sens qu'il existe une implémentation de KeyStore sous OS X backed by the keychain.

Je pense que le trousseau est le meilleur endroit (sinon le lieu) pour stocker le mot de passe. Il est crypté avec un bon algorithme, l'utilisateur est libre d'être aussi permissif ou paranoïaque que possible sur la disponibilité du trousseau pour les applications, et le mot de passe serait alors stocké et configuré comme tous les autres mots de passe stockés par l'utilisateur.

+0

J'aime mieux cela que la réponse de Kevin parce que parfois vous n'écrivez pas un client twitter et vous voulez les avertissements de mot de passe paranoïaque apple. Annuler ou Autoriser Annuler ou Autoriser (Vista presque avait raison) – shemnon

+0

J'aime aussi celui-ci, pour les mêmes raisons. –

+1

Est-ce que quelqu'un a déjà essayé? Je l'ai fait et il semble que vous ne pouvez pas stocker une clé secrète avec apple.security.KeychainStore - voir le code source. –

4

Je n'ai pas essayé cela, mais il semble que vous puissiez accéder au porte-clés avec le fournisseur Apple crypto (com.apple.crypto.provider.Apple), créant un KeyStore de type KeychainStore.


Bon, après quelques essais, j'ai pu accéder aux entrées de certificat privé clés – dans le KeychainStore. Toutefois, les mots de passe de mon trousseau ne s'affichaient pas (aucun alias n'était répertorié) et lorsque j'essayais d'ajouter un KeyStore.SecretKeyEntry (ce qui est nécessaire pour conserver un mot de passe), le message "Clé n'est pas une clé privée" ". Clairement, Apple n'a pas pris en charge SecretKeyEntry. Si vous voulez toujours protéger votre mot de passe Twitter à travers le porte-clés, je pense que le plus proche que vous pouvez obtenir est de générer une paire de clés RSA, auto-signer un certificat, et ajouter un PrivateKeyEntry au trousseau. Ensuite, vous pouvez utiliser la paire de clés pour protéger le mot de passe Twitter.

Il n'est pas très difficile de signer des certificats vous-même, mais si vous suivez cette voie, vous pouvez consulter la bibliothèque BouncyCastle pour obtenir de l'aide.

+0

En effet, cela ne fonctionne pas. Toutefois, il fonctionne avec JCEKS en tant que KeyStore. Pour un exemple, voir http://kingsfleet.blogspot.de/2008/12/storing-password-somewhere-safe.html – hendrik

+0

@hendrik Oui, JCEKS a toujours supporté 'SecretKeyEntry', mais cette question concerne spécifiquement l'utilisation de "Keychain" caractéristique de Mac OS. – erickson

+0

Pas de souci, je voulais juste ajouter quelques informations supplémentaires et en même temps soulevé le problème sur et la liste des ports Java OSX - qui sait, peut-être qu'il est mis en œuvre à un moment donné. – hendrik

3

Vous devriez jeter un coup d'œil à la page de l'API twitters sur le support OAuth. En utilisant OAuth, vous n'avez pas besoin de connaître le mot de passe twitter de l'utilisateur.

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

+0

C'est génial! Je vais devoir m'y intéresser davantage, mais cela semble une bien meilleure solution que de stocker les mots de passe. – Zarkonnen

+0

Content de vous aider. J'espère que cela fonctionne pour vous. –

+0

Si c'est le cas, vous obtiendrez la meilleure réponse, évidemment. – Zarkonnen

Questions connexes