Java IBM JDK将GSSCredential转换为Subject

Java IBM JDK将GSSCredential转换为Subject,java,kerberos,gssapi,Java,Kerberos,Gssapi,使用OracleJDK时,可以使用“org.ietf.jgss.GSSCredential”并使用类“com.sun.security.jgss.GSSUtil.class”从中创建主题 我要寻找的是如何使用ibmjdk实现等效功能 在OracleJDK上,获取的主题随后用于Subject.doAs调用以进行出站连接,但我无法在IBM上实现这一点,因为我无法将GSSCredential转换为可用的主题 我已经看到了以下IBM问题,但我看不出他们提到的SPI类是如何提供这一点的:- 在线提供了Op

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

我要寻找的是如何使用ibmjdk实现等效功能

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

我已经看到了以下IBM问题,但我看不出他们提到的SPI类是如何提供这一点的:- 在线提供了OpenJDK版本的
GSSUtil
。查看代码(和注释),您可以看到它依赖于Sun的GSSName和GSSCredential实现的包私有API,具体来说:
GSSNAMIMPL
GSSNameSpi
Krb5NameElement
GSSCredential


IBMJavaSDK
ibmjgssprovider.jar
包含类似的IBM实现,可用于实现相同的功能。看看
com.ibm.security.jgss
com.ibm.security.krb5
软件包。

它们的工作方式不正确!永远不要使用私有类,
GSSUtil
是私有类。你应该做的是

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

您使用的是什么IBM JDK?WebSphere的一个版本?如果是,那是什么?这不是使用WebSphere。Java版本目前为1.7.0,但1.6也是可取的。谢谢,但我已经尝试过这种方法,如果我可以编写自己的GSSUTIL的实现,我会考虑到,即使挖掘内部API,我也可以发现GSCDDIDEN的IMS实现是根本不同的,甚至无法达到所需的类。不幸的是,这种方法不适用于依赖私有证书的代码。包含KerberosTicket而不是GSSCredential的主题,例如来自Oracle的JDBC驱动程序。@DarranL,如果Oracle驱动程序需要一个私有API类,那么它的设计是错误的。你应该向Oracle提交一份票据。这就是我通过Oracle支持针对几个JDBC错误所做的。但是,如果您采取另一种方法,在doAs调用中使用Krb5LoginModule配置的LoginContext来填充主题,从而获得数据库连接,则登录模块不会将GSSCredential添加到私有凭据中,因此如果驱动程序预料到它会在该场景中丢失。这没有意义,因为驱动程序应该将所有内容都交给JGSS上下文。内部实现可以使用私有API,只要它们是一致的,但是驱动程序是一个外部JAR,它应该只知道外部API。在这方面应该发生什么和实际发生什么似乎是不同的;-)