【问题标题】:Mac OS X Keychain access in Java for Generic PasswordsJava中的Mac OS X钥匙串访问通用密码
【发布时间】:2016-07-06 14:47:33
【问题描述】:

仅使用 Java 在 OS X 的钥匙串中检索通用密码的标准方法是什么? Apple Developer Pages 提供了一些很好的背景,但不幸的是,实现和示例都是用 C 或本机代码编写的。

Java KeyStore OS X 实现似乎只适用于公钥/私钥对和证书,但不适用于通用用户名/密码组合。

我看到一个项目启动了Here:但它相对较旧并且没有积极维护。

对于在 Java 中保护 Mac OS X 中的凭据问题,是否有更先进的解决方案?

编辑:OAuth 不是我正在操作的问题和环境类别的选项......

【问题讨论】:

    标签: java macos security credentials


    【解决方案1】:

    对于 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");
    $4 ==> "b"
    

    【讨论】:

    • 谢谢,我接受这个答案,因为它提供了最多的细节!
    【解决方案2】:

    我自己使用命令行完成了这项工作,例如运行 /usr/bin/security。但是它没有强大的访问控制。因此,您可以从终端运行 /usr/bin/security 以访问相同的密码,但直接调用库的 C++ 应用程序将被阻止。

    因此,我仅将它用于社交媒体帐户的 oauth 令牌。以用户身份登录时启动 Web 浏览器可以进行类似操作。

    https://github.com/yschimke/oksocial/blob/master/src/main/java/com/baulsupp/oksocial/credentials/OSXCredentialsStore.java

    【讨论】:

      【解决方案3】:

      我现在使用https://github.com/davidafsilva/jkeychain,它是 conormcd/osx-keychain-java 的一个分支

      分级

      compile 'pt.davidafsilva.apple:jkeychain:1.0.0'
      

      例子

      final OSXKeychain keychain = OSXKeychain.getInstance();
      final Optional<String> mySecret = keychain.findGenericPassword("mySecret", "username");
      

      项目使用示例:https://github.com/yschimke/okurl/blob/b3208514b4338a2f57bfedccb2da4e6f54d0d99a/src/main/kotlin/com/baulsupp/okurl/credentials/OSXCredentialsStore.kt

      【讨论】:

        【解决方案4】:

        这似乎是一个相当普遍的问题;我发现看起来可能满足您要求的唯一解决方案是this Github project,但它似乎非常陈旧/无人维护,我无法谈论代码的质量或安全性。

        不幸的是,似乎没有原生支持访问存储在钥匙串中的密码,这似乎不是一个足够普遍的问题,需要一个积极开发的库来解决它。

        【讨论】:

          【解决方案5】:

          这里还有 JNA + Maven 项目,它不需要在构建中编译任何本机代码。显然支持 OSX 和 Windows。

          https://bitbucket.org/east301/java-keyring/

          它的功能比 osx-keychain-java 少,但支持 Add and Get Generic Password。

          <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);
          

          【讨论】:

            猜你喜欢
            • 2018-05-14
            • 1970-01-01
            • 2020-03-16
            • 2014-06-25
            • 1970-01-01
            • 2015-03-07
            • 1970-01-01
            • 1970-01-01
            • 2023-04-03
            相关资源
            最近更新 更多