Почему Basic Auth не работает с моим клиентом WCF для веб-службы Java SOAP? - PullRequest
0 голосов
/ 30 апреля 2010

У меня есть веб-сервис на основе Java, для связи с которым требуется базовая аутентификация. Если я ввожу URL-адрес WSDL в свой браузер, мне будет предложено ввести 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 Ответ

1 голос
/ 07 мая 2010

Я просто настроил то же самое - я добавил Справочник по сервисам в Visual Studio, и он получился похожим на то, что вы сделали в коде.

Два примечания, хотя, хотя у него был правильно установлен режим безопасности = "Транспорт", у него не было установлено clientCredentialType = "Basic". Я добавил к этому свой конфиг, и он все еще не работал. Затем я фактически удалил защиту сообщений, поскольку служба, с которой я обращаюсь, только SSL + Basic:

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

Вуаля - все заработало.

Я не уверен, почему это дало эффект, учитывая, что в элементе не указана защита уровня сообщений ... но это так.

...