我想使用Mac KeyChain为我的Java Swing应用程序存储一些用户名/密码组合,以代表用户连接到外部服务。
我发现一些消息来源证明您可以通过执行以下操作来访问java.security.KeyStore对象:
KeyStore keyStore = KeyStore.getInstance("KeychainStore", "Apple");
keyStore.load(null, null);
但是,我找不到任何关于如何使用生成的KeyStore来实际存储/检索用户名和密码的示例。
任何帮助将不胜感激。
谢谢!
你不能从这里“Java KeyStore”到那里“Apple Keychain密码”
密钥库抽象仅将证书包装在密钥链中。
查看钥匙串的本机视图(bash cmd)之间的区别:
security dump ~/Library/Keychains/login.keychain
vs Java对keychain的看法(bash cmd):
keytool -list -storetype KeychainStore -keystore ~/Library/Keychains/login.keychain
请注意,仅包含证书且列表更短。
您需要为Keychain使用不同的包装器才能访问其所有功能。
建议:
另请阅读原生文档:Keychain Services Concepts - OS X Keychain Services Tasks(见图1-3)
您可以“shell”到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"
);
Java Development Guide for Mac OS X指向reference documentation on java.security.KeyStore
。我不熟悉KeyStore
,但也许你会在那里找到你需要的东西。