2011-07-28 13 views
9

Me gustaría usar el Mac KeyChain para almacenar algunas combinaciones de nombre de usuario/contraseña para que mi aplicación Java Swing se use para conectarse a servicios externos en nombre del usuario.¿Cómo se almacena un nombre de usuario/contraseña en Mac Keychain usando Java?

he encontrado unas pocas fuentes que demuestra que se puede obtener acceso a un objeto java.security.KeyStore haciendo:

KeyStore keyStore = KeyStore.getInstance("KeychainStore", "Apple"); 
keyStore.load(null, null); 

Sin embargo, no puedo encontrar ningún ejemplo de cómo se utiliza el almacén de claves que resulta para realmente almacenar/recuperar nombres de usuario y contraseñas.

Cualquier ayuda sería muy apreciada.

Gracias!

+0

Este problema se trata aquí: http://stackoverflow.com/questions/727812/storing-username-password-on-mac-using-java. Ver la respuesta del usuario Erickson. – dejuknow

+0

Si fuera por esa ruta, tendría que estar distribuyendo la clave privada con la aplicación. Esa realmente no parece ser la mejor solución para mí. ¿No hay una forma de almacenar contraseñas en el llavero como lo hacen las aplicaciones regulares de Mac? –

+0

Parece que está intentando usar java.security.KeyStore para acceder a los servicios Apple Keychain. KeyStore es un contenedor abstracto de muchos proveedores. Este enfoque limita la capacidad de usar características específicas de una implementación. Aquí hay un contenedor más específico: https://github.com/conormcd/osx-keychain-java También aquí está el ejemplo del uso del servicio, vea (fig 1-3) https://developer.apple. com/library/ios/documentation/Security/Conceptual/keychainServConcepts/03tasks/tasks.html – Frobbit

Respuesta

0

No se puede llegar "Apple Llavero contraseñas" de aquí "almacén de claves de Java"

La abstracción almacén de claves sólo se envuelve el CERT en el llavero.

Ver la diferencia entre la visión natural de la llavero (CMD Bash):

security dump ~/Library/Keychains/login.keychain

vs vista de Java del llavero (cmd bash):

keytool -list -storetype KeychainStore -keystore ~/Library/Keychains/login.keychain

en cuenta que una solo se incluyen certificados y el listado es más corto.

Deberá usar un envoltorio diferente para Keychain que pueda acceder a todas sus funciones.

Sugerencias:

  • github.com/conormcd/osx-keychain-java
  • uso swig hacer JNI envoltura de

Lea también los documentos nativos: Keychain Services Concepts-OS X Keychain Services Tasks (véase figura 1-3)

+0

Puede inspeccionar el contenedor para ver si perdí una ruta posible: http://cr.openjdk.java.net/~michaelm/7113349/7u4/4/jdk7u-osx/new/src/macosx/classes/apple/ seguridad/KeychainStore.java.html – Frobbit

0

Puede "pagar fuera" de la herramienta de línea de comandos security, que le permite almacenar y recuperar e contraseñas del llavero. Podría mostrar una ventana emergente en la que debe permitir el acceso. Además, obviamente, esto solo funciona en OSX.

Una contraseña se podría ahorrar de este modo:

security add-generic-password -s mywonderfulapp -a $username -w $password 

Para recuperar la contraseña que se puede hacer esto:

security -i find-generic-password -l mywonderfulapp -w 

Para que sea más fácil para capturar la salida se puede usar la biblioteca JProc , p.ejcomo este:

String password = ProcBuilder.run(
    "security", 
    "-i", "find-generic-password", 
    "-l", "mywonderfulapp", "-w" 
); 
Cuestiones relacionadas