Mac OS X Keychain 访问 Java 通用密码
Mac OS X Keychain access in Java for Generic Passwords
仅使用 Java 在 OS X 的钥匙串中检索通用密码的标准方法是什么? Apple Developer Pages 提供了一些很好的背景,但不幸的是,实现和示例是用 C 或本机代码编写的。
Java KeyStore OS X 实现似乎仅适用于 public/private 密钥对和证书,但不适用于通用 username/password 组合。
我看到一个项目启动了Here:但是它比较老,没有积极维护。
是否有更先进的解决方案来解决 Mac OS X Java 中的凭据安全问题?
编辑:OAuth 不是 class 我在其中操作的问题和环境的选项......
这似乎是一个相当普遍的问题;我发现的唯一解决方案看起来可能满足您的要求是 this Github project,但它似乎非常 old/unmaintained,而且我不能说代码的质量或安全性。
不幸的是,似乎没有本地支持访问存储在钥匙串中的密码,而且这似乎不是一个足够普遍的问题,以至于没有一个积极的-开发库来解决它。
我自己使用命令行完成了此操作,例如运行宁/usr/bin/security。但是它没有强大的访问控制。因此,您可以从终端 运行 /usr/bin/security 访问相同的密码,但直接调用库的 C++ 应用程序将被阻止。
因此,我仅将其用于社交媒体帐户的 oauth 令牌。您可以通过在以用户身份登录时启动 Web 浏览器来执行类似的操作。
根据 f-stephen-q 的上述回答,这个库似乎仍然运行良好。我正在使用它的一个分支,它是 mavenised
$ git clone https://github.com/physion/osx-keychain-java
$ mvn install
$ cp dist/osxkeychain.jar ~/myproject/external
添加依赖项
<dependency>
<groupId>us.physion</groupId>
<artifactId>osx-keychain</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/external/osxkeychain.jar</systemPath>
</dependency>
运行它
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");
==> "b"
这里还有JNA + Maven项目,不需要在构建中编译任何本地代码。显然支持 OSX 和 Windows.
https://bitbucket.org/east301/java-keyring/
它的功能比 osx-keychain-java 少,但支持添加和获取通用密码。
<dependency>
<groupId>net.east301</groupId>
<artifactId>java-keyring</artifactId>
<version>1.0.0</version>
</dependency>
示例代码
import net.east301.keyring.Keyring;
import net.east301.keyring.PasswordRetrievalException;
Keyring keyring = Keyring.create();
String pw = keyring.getPassword(service, account);
我现在正在使用 https://github.com/davidafsilva/jkeychain,它是 conormcd/osx-keychain-java
的一个分支
Gradle
compile 'pt.davidafsilva.apple:jkeychain:1.0.0'
例子
final OSXKeychain keychain = OSXKeychain.getInstance();
final Optional<String> mySecret = keychain.findGenericPassword("mySecret", "username");
仅使用 Java 在 OS X 的钥匙串中检索通用密码的标准方法是什么? Apple Developer Pages 提供了一些很好的背景,但不幸的是,实现和示例是用 C 或本机代码编写的。
Java KeyStore OS X 实现似乎仅适用于 public/private 密钥对和证书,但不适用于通用 username/password 组合。
我看到一个项目启动了Here:但是它比较老,没有积极维护。
是否有更先进的解决方案来解决 Mac OS X Java 中的凭据安全问题?
编辑:OAuth 不是 class 我在其中操作的问题和环境的选项......
这似乎是一个相当普遍的问题;我发现的唯一解决方案看起来可能满足您的要求是 this Github project,但它似乎非常 old/unmaintained,而且我不能说代码的质量或安全性。
不幸的是,似乎没有本地支持访问存储在钥匙串中的密码,而且这似乎不是一个足够普遍的问题,以至于没有一个积极的-开发库来解决它。
我自己使用命令行完成了此操作,例如运行宁/usr/bin/security。但是它没有强大的访问控制。因此,您可以从终端 运行 /usr/bin/security 访问相同的密码,但直接调用库的 C++ 应用程序将被阻止。
因此,我仅将其用于社交媒体帐户的 oauth 令牌。您可以通过在以用户身份登录时启动 Web 浏览器来执行类似的操作。
根据 f-stephen-q 的上述回答,这个库似乎仍然运行良好。我正在使用它的一个分支,它是 mavenised
$ git clone https://github.com/physion/osx-keychain-java
$ mvn install
$ cp dist/osxkeychain.jar ~/myproject/external
添加依赖项
<dependency>
<groupId>us.physion</groupId>
<artifactId>osx-keychain</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/external/osxkeychain.jar</systemPath>
</dependency>
运行它
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");
==> "b"
这里还有JNA + Maven项目,不需要在构建中编译任何本地代码。显然支持 OSX 和 Windows.
https://bitbucket.org/east301/java-keyring/
它的功能比 osx-keychain-java 少,但支持添加和获取通用密码。
<dependency>
<groupId>net.east301</groupId>
<artifactId>java-keyring</artifactId>
<version>1.0.0</version>
</dependency>
示例代码
import net.east301.keyring.Keyring;
import net.east301.keyring.PasswordRetrievalException;
Keyring keyring = Keyring.create();
String pw = keyring.getPassword(service, account);
我现在正在使用 https://github.com/davidafsilva/jkeychain,它是 conormcd/osx-keychain-java
的一个分支Gradle
compile 'pt.davidafsilva.apple:jkeychain:1.0.0'
例子
final OSXKeychain keychain = OSXKeychain.getInstance();
final Optional<String> mySecret = keychain.findGenericPassword("mySecret", "username");