java - 是否可以从 jaas.conf 中的类路径引用 key 表?

标签 java classpath kerberos jaas keytab

是否可以从 jaas.conf 中的类路径引用 key 表?

我尝试了以下方法,但似乎没有任何效果:

Client{
keyTab=classpath: /mykeytab.keytab
}

Client{
keyTab=file: /mykeytab.keytab
}

Client{
keyTab=file: resources/mykeytab.keytab
}

最佳答案

据我所知,除了 jaas.conf 文件中 key 表的绝对路径之外,无法使用任何其他内容。

Krb5LoginModule.java ,人们看到(例如,Krb5LoginModule.java at github.com)

if (useKeyTab) {
  ktab = (keyTabName == null)
           ? KeyTab.getInstance()
           : KeyTab.getInstance(new File(keyTabName));

还有.getInstance()代码将使用.getPath()在实例化File上对象(参见 KeyTab.java )。

因此,基本方法中没有任何内容可以搜索类路径。另请参阅this question here about keytab configuration as well .

也就是说,并且没有在 OP 的配置文件中显示,可以将类从通常的“com.sun.security.authmodule.Krb5LoginModule”更改为自定义模块。在此自定义模块中,人们可以执行一些操作,例如设置 Map<String,?> 中的条目。 initialize 中使用的参数Krb5LoginModule的方法.

我们已经实现了这样的方法来允许在我们的客户端应用程序中定义各种设置,而不是尝试让我们的用户在客户端上编辑 jaas.conf 文件。因此,我们使用一个自定义模块,该模块使用组合方法封装 Krb5LoginModule, but sets all of the desired options into the map `.

它是这样的:

Map<String, String> mOpts = new HashMap<>(); // options

mOpts.put("doNotPrompt", Boolean.TRUE.toString());
mOpts.put("useTicketCache", Boolean.FALSE.toString());
mOpts.put("useKeyTab", Boolean.TRUE.toString());
mOpts.put("keyTab", options.getKeytabPath().toString());
mOpts.put("principal", PrincipalUtils.getDefaultPrincipal().getName());

krb5LM.initialize(_subject, options.getCallbackHandler(), mSS, mOpts);

//
// attempt to authenticate the user
//
krb5LM.login();

可以在类路径中搜索所需的文件名,然后将找到的文件传递给 Map 。在上面的准示例中,options对象已从用户的首选项中提取 key 表并对其进行验证。但是,我们可以实现类路径的搜索,而不是拥有特定的预浏览文件。

关于java - 是否可以从 jaas.conf 中的类路径引用 key 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51028835/

相关文章:

java - 如何使用 JPA native 查询正确访问 where 子句内的 varray 列?

java - 如何在 ThreadPoolExecutor 中保持核心线程存活并淘汰多余线程? keepAliveTime 没有按预期工作

java - 如何从 spring application.yml 设置 "max_allowed_packet"属性

java - 在 Kubernetes ConfigMap 上托管 jar 文件

scala - 无法使用 IntelliJ 在本地连接到 hdfs kerberized 集群

c# - 无法使用基本身份验证访问 WCF Web 服务

postgresql - 我如何判断 postgres 是否安装了 kerberos?

java - Java 变量如何与其自身不同?

java - 从命令行运行时将 jar 添加到类路径

java.lang.ClassNotFoundException 尽管使用了 CLASSPATH 环境变量