Accesso portachiavi Mac OS X in Java per password generiche
Qual è il modo standard per recuperare password generiche nel Portachiavi di OS X usando solo Java? Apple Developer Pages fornisce un buon background ma sfortunatamente l'implementazione e gli esempi sono in codice C o nativo.
L'implementazione di Java KeyStore OS X sembra essere valida solo per coppie di chiavi pubbliche/private e certificati, ma non per combinazioni generiche di nome utente/password.
Vedo un progetto avviato Qui: ma è relativamente vecchio e non attivamente mantenuto.
Esiste una soluzione più avanzata al problema della protezione delle credenziali in Mac OS X in Java?
EDIT: OAuth non è un'opzione per la classe di problema e ambiente in cui sto operando ...
4 answers
Oltre alla risposta sopra di f-stephen-q, questa libreria sembra funzionare ancora bene. Sto usando un fork di esso che è mavenised
$ git clone https://github.com/physion/osx-keychain-java
$ mvn install
$ cp dist/osxkeychain.jar ~/myproject/external
Aggiunta di una dipendenza
<dependency>
<groupId>us.physion</groupId>
<artifactId>osx-keychain</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/external/osxkeychain.jar</systemPath>
</dependency>
Esecuzione
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"
Questo sembra essere un problema abbastanza comune; l'unica soluzione che ho trovato che sembra che possa soddisfare le tue esigenze è questo progetto Github, ma sembra essere estremamente vecchio/non mantenuto, e non posso parlare con la qualità o la sicurezza del codice.
Sfortunatamente, non sembra esserci supporto nativo per l'accesso alle password memorizzate nel portachiavi, e questo non sembra essere un problema abbastanza comune da poter essere una libreria sviluppata attivamente da risolvere esso.
L'ho fatto da solo usando la riga di comando, ad esempio eseguendo /usr/bin/security. Tuttavia non ha forti controlli di accesso. Quindi puoi eseguire / usr / bin / security da un terminale per accedere alle stesse password, ma un'app C++ che chiama direttamente nella libreria verrebbe bloccata.
Per questo motivo lo sto usando solo per i token oauth per gli account di social media. Cose che potresti fare allo stesso modo lanciando un browser Web quando hai effettuato l'accesso come utente.
C'è anche il progetto JNA + Maven qui che non richiede la compilazione di alcun codice nativo nella build. Apparentemente supporta OSX e Windows.
Https://bitbucket.org/east301/java-keyring /
Ha meno funzioni di osx-keychain-java, ma supporta Aggiungi e Ottieni password generiche.
<dependency>
<groupId>net.east301</groupId>
<artifactId>java-keyring</artifactId>
<version>1.0.0</version>
</dependency>
Codice di esempio
import net.east301.keyring.Keyring;
import net.east301.keyring.PasswordRetrievalException;
Keyring keyring = Keyring.create();
String pw = keyring.getPassword(service, account);