如何使用 clientCredentialType="Basic" 将 Java 客户端连接到 WCF 服务

Posted

技术标签:

【中文标题】如何使用 clientCredentialType="Basic" 将 Java 客户端连接到 WCF 服务【英文标题】:How to connect Java client to WCF service using clientCredentialType="Basic" 【发布时间】:2011-01-11 05:39:30 【问题描述】:

我必须从 Java 客户端 连接到具有以下绑定配置WCF Web 服务

<basicHttpBinding>
    <binding name="basicHttpBindingSecurity">
        <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Basic"/>
        </security>
    </binding>
</basicHttpBinding>

我正在使用 JAX-WS。能否给我一个代码 sn-p 显示如何在 Java 客户端中设置用户名和密码?

我试过这个:

Map<String, Object> reqContext = ((BindingProvider) port).getRequestContext();
reqContext.put(BindingProvider.USERNAME_PROPERTY, "username");
reqContext.put(BindingProvider.PASSWORD_PROPERTY, "password");

但它不起作用。我也试过这个:

Map<String, Object> reqContext = ((BindingProvider) port).getRequestContext();
reqContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://username:password@localhost:8090/MyService");

还是没有成功。

谢谢, 拉法尔

【问题讨论】:

+1 对于措辞和格式正确的问题。 【参考方案1】:

哎呀!对不起...

第一个解决方案有效,但我在 WCF 服务配置中犯了一个错误。所以基本上如果你有类似的问题会厌倦这个:

Map<String, Object> reqContext = ((BindingProvider) port).getRequestContext();
reqContext.put(BindingProvider.USERNAME_PROPERTY, "username");
reqContext.put(BindingProvider.PASSWORD_PROPERTY, "password");

最好的问候, 拉法尔

【讨论】:

您在 WCF 配置中犯了什么错误。我正在尝试使用相同的方法使用 jax-ws 客户端调用 WCF 服务,但是我收到 401 unathorized 错误,而通过 .net 客户端也可以正常工作

以上是关于如何使用 clientCredentialType="Basic" 将 Java 客户端连接到 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章

从 .Net 2.0 使用 ClientCredentialType="UserName" 的 WCF 服务

跨域的 NetTcpBinding

WCF 身份验证

WCF 在负载下失败 - MessageSecurityException

通过 WCF 服务传递 NetworkCredential 以与 EWS API 一起使用

WCF 身份验证 - 验证消息的安全性时出错