2016-07-06 15 views
1

Wie lautet der Standard zum Abrufen generischer Kennwörter im Schlüsselbund von OS X mit nur Java? Apple Developer Pages bieten einige gute Hintergrund, aber die Implementierung und Beispiele sind in C oder nativen Code leider.Mac OS X Keychain-Zugriff in Java für generische Kennwörter

Die Java KeyStore OS X-Implementierung scheint nur für öffentliche/private Schlüsselpaare und Zertifikate geeignet zu sein, aber nicht für generische Benutzername/Passwort-Kombinationen. Ich sehe ein Projekt gestartet Here: aber es ist relativ alt und nicht aktiv gepflegt.

Gibt es eine Lösung auf dem neuesten Stand der Technik für das Problem der Sicherung von Anmeldeinformationen in Mac OS X in Java?

EDIT: OAuth ist keine Option für die Klasse des Problems und die Umgebung, die in der ich Betrieb ...

Antwort

1

Im Anschluss an die Antwort oben von f-stephen-q, erscheint diese Bibliothek auch noch zu arbeiten. Ich verwende eine Gabel davon, die

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

Hinzufügen einer Abhängigkeit

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

mavenised Ausgeführt wird es

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

jshell> import com.mcdermottroe.apple.*; 
jshell> OSXKeychain keychain = OSXKeychain.getInstance(); 
keychain ==> [email protected] 

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

jshell> keychain.findGenericPassword("aardvark", "a"); 
$4 ==> "b" 
+0

Vielen Dank, ich bin diese Antwort zu akzeptieren, da es die meisten Menge an Details präsentiert! – echen

1

Dies scheint ein recht häufiges Problem zu sein; die einzige Lösung, die ich gefunden habe, die aussieht, als ob es Ihre Anforderungen erfüllen könnte, ist this Github project, aber es scheint extrem alt/nicht gepflegt zu sein, und ich kann nicht mit der Qualität oder Sicherheit des Codes sprechen.

Leider scheint es keine native Unterstützung für den Zugriff auf Passwörter im Schlüsselbund zu geben, und dies scheint kein allgemein genug Problem für eine aktiv entwickelte Bibliothek zu sein, um es zu lösen.

1

Ich habe dies selbst getan, indem ich die Befehlszeile, z. läuft/usr/bin/Sicherheit. Es hat jedoch keine starken Zugriffskontrollen. Sie können also/usr/bin/security von einem Terminal ausführen, um auf dieselben Passwörter zuzugreifen, aber eine C++ App, die direkt in die Library ruft, wird blockiert.

Aus diesem Grund verwende ich es nur für oauth Tokens für Social Media-Konten. Dinge, die Sie ähnlich tun könnten, indem Sie einen Webbrowser starten, wenn Sie als Benutzer angemeldet sind.

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

0

Es gibt auch JNA + Maven Projekt hier, die nicht benötigt Kompilieren eines beliebigen systemeigenen Codes im Build. Anscheinend unterstützt OSX und Windows.

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

Es hat weniger Funktionen als osx-Schlüsselanhänger-java, unterstützt aber hinzufügen und Generic Passwort.

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

Beispielcode

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

Keyring keyring = Keyring.create(); 
String pw = keyring.getPassword(service, account);