代码之家  ›  专栏  ›  技术社区  ›  orj

为什么Basic Auth不能与我的WCF客户端到javasoapweb服务一起工作?

  •  0
  • orj  · 技术社区  · 15 年前

    我有一个基于Java的web服务,它需要基本的身份验证才能与之通信。如果我在浏览器中键入WSDL url,系统会提示我输入Basic Auth。我可以通过输入正确的凭证来获取。

    但是使用我的WCF客户端不起作用。

    我的WCF客户端是这样构造的:

    var binding = new BasicHttpBinding
    {
      MaxReceivedMessageSize = 2048 * 10240,
      Security = {
        Mode = BasicHttpSecurityMode.TransportCredentialOnly, 
        Transport = {
          ClientCredentialType = HttpClientCredentialType.Basic,
          Realm = "MYREALM",
          ProxyCredentialType = HttpProxyCredentialType.None
        }, 
        Message = {
          ClientCredentialType = BasicHttpMessageCredentialType.UserName,
          AlgorithmSuite = SecurityAlgorithmSuite.Default
        }
      }
    };
    
    var client = new WebServiceClient(binding, endpoint);
    client.ClientCredentials.UserName.UserName = username;
    client.ClientCredentials.UserName.Password = password;
    client.DoWebServiceMethod();
    

    我得到以下例外。

    System.Net.WebException: The remote server returned an error: (401) Unauthorized.
    at System.Net.HttpWebRequest.GetResponse()
    at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) 
    System.ServiceModel.Security.MessageSecurityException: The HTTP request is unauthorized with client authentication scheme 'Basic'. The authentication header received from the server was 'Basic realm="MYREALM"'.
    

    据我所知,我做的事情是对的。我哪里出错了?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Ethan J. Brown    15 年前

    我只是设置了同样的东西--我在Visual Studio中添加了一个服务引用,结果与您在代码中所做的类似。

    不过有两个注意事项,虽然它正确设置了security mode=“Transport”,但没有设置clientCredentialType=“Basic”。我添加了我的配置,但仍然没有工作。然后我实际上删除了消息安全性,因为我联系的服务仅限于SSL+基本服务:

    <message clientCredentialType="UserName" algorithmSuite="Default" />
    

    瞧——成功了。