如何使用Java在Mac Keychain中存储用户名/密码?

时间:2011-07-28 05:31:40

标签: java macos keychain

我想使用Mac KeyChain为我的Java Swing应用程序存储一些用户名/密码组合,以代表用户连接到外部服务。

我找到了一些来源,证明你可以通过这样做来访问java.security.KeyStore对象:

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

但是,我找不到任何关于如何使用生成的KeyStore来实际存储/检索用户名和密码的示例。

非常感谢任何帮助。

谢谢!

3 个答案:

答案 0 :(得分:0)

你无法从这里“Java KeyStore”获得“Apple Keychain密码”

密钥库抽象仅将证书包装在钥匙串中。

查看钥匙串的原生视图(bash cmd)之间的区别:

security dump ~/Library/Keychains/login.keychain

vs Java的钥匙串视图(bash cmd):

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

请注意,只包含证书且列表更短。

您需要使用另一个可以访问其所有功能的Keychain包装器。

建议:

  • github.com/conormcd/osx-keychain-java
  • 使用swig制作JNI包装器

另请阅读原生文档:Keychain Services Concepts - OS X Keychain Services Tasks(参见图1-3)

答案 1 :(得分:0)

你可以"炮轰"到security命令行工具,它允许您从钥匙串存储和检索密码。它可能会弹出一个允许访问的弹出窗口。此外,这显然只适用于OSX。

可以像这样保存密码:

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

要检索密码,您可以执行以下操作:

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

为了更容易捕获输出,您可以使用JProc库,例如像这样:

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

答案 2 :(得分:-1)

Java Development Guide for Mac OS X指向reference documentation on java.security.KeyStore。我不熟悉KeyStore,但也许你会在那里找到你需要的东西。