gpt4 book ai didi

java - 使用 SSPI 从运行在 Windows 上的 Java 应用程序获取 SSO

转载 作者:可可西里 更新时间:2023-11-01 09:26:31 25 4
gpt4 key购买 nike

我有一个在 Windows 上运行的 Java 应用程序,它需要使用 Kerberos/SPNEGO 对 Web 应用程序进行身份验证。我知道如何配置 JAAS 来实现这一点,但我发现 Java(JDK6 和 JDK7beta)Kerberos 实现缺少一些我需要的重要功能。例如,支持引用或使用 DNS 确定主机的领域(我有一个多领域环境)。

有没有第三方模块可以使用Windows原生实现认证SSPI ?我们已经解决了配置 Windows 客户端以在我们的环境中工作的麻烦,如果不必为 Java 再次执行此操作就好了。我知道 Waffle及其 WindowsLoginModule,但它似乎不执行 SSO,因为它要求用户将其凭据重新输入到应用程序中。

最佳答案

我们遇到过类似的问题。我们遇到的主要问题是在使用 Windows UAC 时 GSS-API 实现失败,我们使用 Waffle 解决了这个问题。

Waffle基本上是 JNA 调用 SSPI 的包装器。我们通过重写类 sun.net.www.protocol.http.NegotiatorImpl 成功地使用 Waffle 实现了 SSO:

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 一起复制到您的 JVM 的 ./jre/lib/endorsed。使用 Java Endorsed Standards Override Mechanism JVM 的默认实现,这取代了 JVM 的默认 Negotiator 实现。

关于java - 使用 SSPI 从运行在 Windows 上的 Java 应用程序获取 SSO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3580099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com