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

问题描述 投票:9回答:3

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

我发现一些消息来源证明您可以通过执行以下操作来访问java.security.KeyStore对象:

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

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

任何帮助将不胜感激。

谢谢!

java macos keychain
3个回答
0
投票

你不能从这里“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使用不同的包装器才能访问其所有功能。

建议:

  • GitHub.com/con ORM CD/哦首先-keychain-Java
  • 使用swig制作JNI包装器

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


0
投票

您可以“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"
);

-1
投票

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.