【问题标题】:Calling a .NET web service from within a Java web app in Tomcat with NTLM / Kerberos使用 NTLM/Kerberos 从 Tomcat 中的 Java Web 应用程序中调用 .NET Web 服务
【发布时间】:2017-10-05 11:28:32
【问题描述】:

我有一个 Java webapp,它包含一个远程 .NET SOAP web 服务的 HttpClient。到现在为止还挺好。 Java webapp 在 Windows Server 上的 Apache Tomcat 中运行,并使用服务帐户。

不幸的是,远程 .net Web 服务使用 NTLM。这个answer 让我对如何做到这一点有了一些了解。但似乎配置仍然需要用户名/密码,而不是利用运行 Tomcat 的服务帐户。另外,我不确定 Java 身份验证器应该是什么样子(如 here 所示)。

有人尝试过吗?

更新

一些有趣的链接:

【问题讨论】:

  • 您是否尝试在 java wep 应用程序中访问 tomcat 服务帐户(不认为这是可能的)?或者您是否想弄清楚如何将 NTLM 凭据发送到 .net Web 服务?
  • 后者。我想在 Windows 服务器上的 tomcat 内的 Java Web 应用程序中调用 .net ws。 .net ws 需要 ntlm 身份验证,我想利用 tomcat 运行的服务帐户
  • 看看华夫饼,如下所述:stackoverflow.com/questions/3580099/…
  • 不要利用 tomcat 服务帐户。该帐户旨在运行 Tomcat 而不是 WS 调用。如果此帐户遭到入侵,这意味着您不仅可以访问 tomcat 服务器,还可以访问调用 Web 服务并可能窃取其他信息。简而言之,这会削弱您的安全模型。
  • 还有什么替代方案?

标签: java web-services wcf tomcat ntlm


【解决方案1】:

似乎在带有 Tomcat 8.x 的 Java 7/8 上,以下内容足以“透明地”利用 NTLM 身份验证。

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.client.methods.HttpUriRequest;

紧随其后

boolean useWindowsAuthentication = true;
HttpUriRequest request;
CloseableHttpClient httpclient;
if (useWindowsAuthentication){
    log.info("Using Windows Authentication");
    httpclient = WinHttpClients.createDefault();    
} else {
    httpclient = HttpClients.createDefault();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2020-12-07
    • 1970-01-01
    相关资源
    最近更新 更多