将 Crendentials 从 dotNet 客户端传递到 Java Web Service

本文关键字:Java Web Service Crendentials dotNet 客户端 | 更新日期: 2023-09-27 18:34:03

我有一个调用java Web服务的dot net应用程序。我正在尝试通过将凭据传递给 java 服务来实现身份验证。这是设置凭据的点网代码。如何在我的 Java 应用程序中获取这些凭据?它们未在标题中设置...

 System.Net.NetworkCredential serviceCredentials = new NetworkCredential("user", "pass");
 serviceInstance.Credentials = serviceCredentials;

serviceInstance 是 SoapHttpClientProtocol 的一个实例。

我尝试过像这样注入WebServiceContext。

@Resource
WebServiceContext wsctx;

并从标题中拉出 crentials,但它们不在那里。

将 Crendentials 从 dotNet 客户端传递到 Java Web Service

您没有以正确的方式将凭据传递给您的服务。为了获取授权http请求标头,请执行以下操作:

// Create the network credentials and assign
// them to the service credentials
NetworkCredential netCredential = new NetworkCredential("user", "pass");
Uri uri = new Uri(serviceInstance.Url);
ICredentials credentials = netCredential.GetCredential(uri, "Basic");
serviceInstance.Credentials = credentials;
// Be sure to set PreAuthenticate to true or else
// authentication will not be sent.
serviceInstance.PreAuthenticate = true;

注意:请务必将PreAuthenticate设置为 true,否则不会发送身份验证。有关详细信息,请参阅此文章。

我不得不为此挖掘一些旧代码:)

更新:按照下面的注释中的建议使用 fiddler 检查请求/响应标头后,Java Web 服务端缺少WWW-Authenticate标头。

实现

"JAX-WS 基本身份验证"的更优雅方法可以在本文中找到,使用SoapHeaderInterceptor(Apache CXF 拦截器)