我有一个在 Windows 上运行的 Java 应用程序,需要使用 Kerberos/SPNEGO 对 Web 应用程序进行身份验证。我知道如何配置 JAAS 来实现此目的,但我发现 Java(JDK6 和 JDK7beta)Kerberos 实现缺少一些我需要的重要功能。例如,支持引用或使用 DNS 来确定主机的领域(我有一个多领域环境)。
是否有第三方模块可以使用Windows本机实现身份验证SSPI http://msdn.microsoft.com/en-us/library/aa380493(VS.85).aspx?我们已经经历了配置 Windows 客户端以在我们的环境中工作的麻烦,如果不必为 Java 再次执行此操作,那就太好了。我知道Waffle http://waffle.codeplex.com及其 WindowsLoginModule,但它似乎没有执行 SSO,因为它要求用户在应用程序中重新输入其凭据。
我们也遇到过类似的问题。我们面临的主要问题是使用 Windows UAC 时 GSS-API 实现失败,我们使用 Waffle 解决了这个问题。
Waffle https://github.com/dblock/waffle基本上是 JNA 调用 SSPI 的包装器。我们成功地使用 Waffle 通过重写该类来实现 SSOsun.net.www.protocol.http.NegotiatorImpl
:
package sun.net.www.protocol.http;
import java.io.IOException;
import waffle.windows.auth.impl.WindowsSecurityContextImpl;
public class NegotiatorImpl extends Negotiator {
private String serviceName;
public NegotiatorImpl(HttpCallerInfo hci) throws IOException {
this.serviceName = "HTTP/" + hci.host.toLowerCase();
}
@Override
public byte[] firstToken() throws IOException {
return WindowsSecurityContextImpl.getCurrent("Negotiate", serviceName).getToken();
}
@Override
public byte[] nextToken(byte[] in) throws IOException {
return new byte[0];
}
}
然后,您可以创建一个仅包含此类的 JAR,并将其与 Waffle 和 JNA JAR 一起复制到./jre/lib/认可你的 JVM 的。使用Java 认可的标准覆盖机制 http://docs.oracle.com/javase/8/docs/technotes/guides/standards/JVM 的,这取代了默认的Negotiator
JVM 的实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)