HTTP请求未经授权使用客户端身份验证方案' Basic'。从服务器接收的认证头是“基本领域=""

时间:2014-04-06 15:37:07

标签: web-services wcf wcf-binding

我正在尝试访问需要身份验证的Soap Web服务(HTTP)。我正在使用WCF来使用该服务。 我收到错误消息" HTTP请求未经授权使用客户端身份验证方案'基本'。从服务器收到的身份验证标题是' Basic realm =" XXXXX"''。"

然而,当我尝试发送身份验证标头以及每个请求时。当我尝试使用Web服务执行任何操作时,我收到了401错误。

感谢任何帮助,谢谢。

这就是我的代码:

 var myBinding = new BasicHttpBinding("exampleBinding");
    myBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
    myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
    myBinding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;
    EndpointAddress ea = new EndpointAddress("http://test.co.uk/webservices");

    var serviceClient = new ServicesClient(myBinding, ea);
    serviceClient.ClientCredentials.UserName.UserName = "username";
    serviceClient.ClientCredentials.UserName.Password = "password";
    HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();

    httpRequestProperty.Headers[HttpRequestHeader.Authorization] = "Basic " +                   Convert.ToBase64String(Encoding.ASCII.GetBytes(serviceClient.ClientCredentials.UserName.UserName + ":" + serviceClient.ClientCredentials.UserName.Password));

    httpRequestProperty.Headers[HttpRequestHeader.ProxyAuthorization] =  "Basic " +             Convert.ToBase64String(Encoding.ASCII.GetBytes(serviceClient.ClientCredentials.UserName.UserName + ":" + serviceClient.ClientCredentials.UserName.Password));

    using (OperationContextScope scope = new OperationContextScope((IClientChannel)serviceClient.InnerChannel))
    {
      OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] =   httpRequestProperty;

      var response = serviceClient.DepartureBoard(request);
    }


Web config
-----------
   <bindings>
          <basicHttpBinding>
            <binding name="jpservicesBinding">
              <security mode="Transport">
                <transport clientCredentialType="Basic" proxyCredentialType="Basic" realm=""></transport>
                <message clientCredentialType="UserName"/>
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
        <client>
          <endpoint address="http://test.co.uk/webservices"
            binding="basicHttpBinding" bindingConfiguration="exampleBinding"
            contract="RealTimePlanner.jservices" name="test" />
        </client>

0 个答案:

没有答案