【问题标题】:IBM JDK Convert GSSCredential to SubjectIBM JDK 将 GSSCredential 转换为主题
【发布时间】:2014-03-21 18:22:25
【问题描述】:

使用 Oracle JDK 时,可以使用“org.ietf.jgss.GSSCredential”并使用“com.sun.security.jgss.GSSUtil.class”类从中创建主题。

我正在寻找的是如何使用 IBM JDK 实现等价物。

在 Oracle JDK 上,获取的主题随后用于 Subject.doAs 调用以进行持续的出站连接,但我无法在 IBM 上实现这一点,因为我无法将 GSSCredential 转换为可用的主题。

我看过以下 IBM 票证,但看不到他们提到的 SPI 类如何提供此功能:- http://www-01.ibm.com/support/docview.wss?uid=swg1IZ45390

【问题讨论】:

  • 您使用的是什么 IBM JDK? WebSphere 的一个版本?如果有,是哪一个?
  • 这不是使用 WebSphere。 Java 版本目前是 1.7.0,但 1.6 也是可取的。

标签: java kerberos gssapi


【解决方案1】:

OpenJDK 版本的GSSUtilsource code 可在线获取。查看代码(和 cmets),您可以看到它依赖于 Sun 的 GSSName 和 GSSCredential 实现的包私有 API,具体而言:GSSNameImplGSSNameSpiKrb5NameElementGSSCredentialImpl
IBM Java SDK ibmjgssprovider.jar 包含类似的 IBM 实现,可用于实现相同的功能。看看com.ibm.security.jgsscom.ibm.security.krb5 包。

【讨论】:

  • 谢谢,但我已经尝试过这种方法,如果我可以编写自己的 GSSUtil 实现,我会考虑这样做,但即使深入研究内部 API,我也会发现 IBM 的 GSSCredential 实现与没有甚至可以上所需的课程。
【解决方案2】:

他们的工作方式不正确!永远不要使用私人课程,GSSUtil 是私人课程。你应该做的是

Subject sub = new Subject();
sub.getPrivateCredentials().add(gssCredential);
...
Subject.doAs(sub, action);

【讨论】:

  • 不幸的是,这种方法不起作用,因为有些代码依赖于包含 KerberosTicket 而不是 GSSCredential(例如 Oracle 的 JDBC 驱动程序)的 Subject 的私有凭据。
  • @DarranL,如果 Oracle 驱动程序需要私有 API 类,那么它就是设计不当。您应该向 Oracle 提交票证。这就是我通过 My Oracle Support 针对几个 JDBC 错误所做的工作。
  • 但是,如果您采用替代方法并调用配置了 Krb5LoginModule 的 LoginContext 来填充主题,然后在获取数据库连接的 doAs 调用中使用它,则登录模块不会将 GSSCredential 添加到私有凭据,因此如果驱动程序期望它,那么该场景将丢失它。
  • 这没有意义,因为驱动程序应该将所有内容交给 JGSS 上下文。内部实现可以使用私有 API,只要它们是一致的,但驱动程序是一个外部 JAR,它应该只知道外部 API。
  • 在这个领域应该发生什么和实际发生什么似乎是不同的事情;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
相关资源
最近更新 更多