Accès au trousseau Mac OS X en Java pour les mots de passe génériques


Quel est le moyen standard de récupérer des mots de passe génériques dans le trousseau d'OS X en utilisant uniquement Java? Les pages de développeurs Apple fournissent un bon arrière-plan, mais l'implémentation et les exemples sont malheureusement en C ou en code natif.

L'implémentation Java KeyStore OS X semble être bonne uniquement pour les paires de clés publiques/privées et les certificats, mais pas pour les combos nom d'utilisateur/mot de passe génériques.

Je vois un projet démarré Ici: mais il est relativement ancien et pas activement exploité.

Existe-t-il une solution plus moderne au problème de la sécurisation des informations d'identification sous Mac OS X en Java?

EDIT : OAuth n'est pas une option pour la classe de problème et d'environnement dans laquelle j'opère ...

Author: echen, 2016-07-06

4 answers

Suite à la réponse ci-dessus par f-étienne-q, cette bibliothèque semble bien fonctionner encore. J'utilise un fork de celui-ci qui est mavenised

$ git clone https://github.com/physion/osx-keychain-java
$ mvn install
$ cp dist/osxkeychain.jar ~/myproject/external

Ajout d'une dépendance

<dependency>
  <groupId>us.physion</groupId>
  <artifactId>osx-keychain</artifactId>
  <version>1.0</version>
  <scope>system</scope>
  <systemPath>${project.basedir}/external/osxkeychain.jar</systemPath>
</dependency>

L'exécuter

osx-keychain-java$ jshell -cp ./dist/osxkeychain.jar

jshell> import com.mcdermottroe.apple.*;
jshell> OSXKeychain keychain = OSXKeychain.getInstance();
keychain ==> com.mcdermottroe.apple.OSXKeychain@2286778

jshell> keychain.addGenericPassword("aardvark", "a", "b");

jshell> keychain.findGenericPassword("aardvark", "a");
$4 ==> "b"
 1
Author: Yuri Schimke, 2016-07-25 06:46:08

Cela semble être un problème assez courant; la seule solution que j'ai trouvée qui semble répondre à vos exigences est ce projet Github, mais il semble être extrêmement ancien/non entretenu, et je ne peux pas parler de la qualité ou de la sécurité du code.

Malheureusement, il ne semble pas y avoir de support natif pour accéder aux mots de passe stockés dans le trousseau, et cela ne semble pas être un problème assez commun pour qu'il y ait une bibliothèque activement développée à résoudre il.

 1
Author: F. Stephen Q, 2016-07-06 16:10:18

Je l'ai fait moi-même en utilisant la ligne de commande, par exemple en exécutant /usr/bin/security. Cependant, il n'a pas de contrôles d'accès puissants. Vous pouvez donc exécuter /usr / bin / security à partir d'un terminal pour accéder aux mêmes mots de passe, mais une application C++ appelant directement dans la bibliothèque serait bloquée.

Pour cette raison, je ne l'utilise que pour les jetons oauth pour les comptes de médias sociaux. Choses que vous pourriez faire de même en lançant un navigateur web lorsque vous êtes connecté en tant qu' utilisateur.

Https://github.com/yschimke/oksocial/blob/master/src/main/java/com/baulsupp/oksocial/credentials/OSXCredentialsStore.java

 1
Author: Yuri Schimke, 2016-07-24 10:56:48

Il y a aussi le projet JNA + Maven ici qui ne nécessite pas de compiler de code natif dans la construction. Apparemment prend en charge OSX et Windows.

Https://bitbucket.org/east301/java-keyring/

Il a moins de fonctionnalités que osx-keychain-java, mais prend en charge l'ajout et l'obtention d'un mot de passe générique.

<dependency>
  <groupId>net.east301</groupId>
  <artifactId>java-keyring</artifactId>
  <version>1.0.0</version>
</dependency>

Exemple de code

import net.east301.keyring.Keyring;
import net.east301.keyring.PasswordRetrievalException;

Keyring keyring = Keyring.create();
String pw = keyring.getPassword(service, account);
 0
Author: Yuri Schimke, 2016-07-31 07:33:43