Как использовать ссылку на службу с базовой аутентификацией службы WCF SOAP - PullRequest
7 голосов
/ 22 марта 2012

У меня есть служба WCF SOAP, которая использует базовую аутентификацию доступа.SSL не используется - я понимаю проблемы безопасности здесь.

Используя приложение WCFTestClient, я проверил, работает ли служба, временно жестко запрограммировав в службу имя пользователя и пароль, чтобы использовать, когда заголовок Authorizationотсутствует.

Я сейчас пытаюсь написать тестовое приложение, которое передает учетные данные через заголовок Authorization.Я добавил ссылку на службу в свою тестовую программу, но заголовок Authorization отсутствует в запросе http.Сгенерированный MyServiceClient класс использует System.ServiceModel.ClientBase

В моем тестовом приложении я устанавливаю учетные данные следующим образом

MyServiceClient client = new MyServiceClient("BasicHttpBinding_MyService");
client.ClientCredentials.UserName.UserName = "WebServiceUsername";
client.ClientCredentials.UserName.Password = "WebServicepassword";

Я также попытался выполнить следующее

MyServiceClient client = new MyServiceClient();
ClientCredentials loginCredentials = new ClientCredentials();
loginCredentials.UserName.UserName = "WebServiceUsername";
loginCredentials.UserName.Password = "WebServicepassword";
client.Endpoint.Behaviors.Remove(client.Endpoint.Behaviors.Find<ClientCredentials>()); 
client.Endpoint.Behaviors.Add(loginCredentials);

Служба web.config выглядит следующим образом

<services>
  <service name="MyService" behaviorConfiguration="MyBehavior" >
    <endpoint contract="MyService" binding="basicHttpBinding" />
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
  </service>
</services>

Тест app.config выглядит следующим образом

<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_MyService">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Basic"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:55314/MyService.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_MyService"
        contract="MyService" name="BasicHttpBinding_MyService" />
    </client>
  </system.serviceModel>
</configuration>

Есть мысли о том, что мне не хватает?

Ответы [ 2 ]

4 голосов
/ 23 марта 2012

Это хорошая отправная точка, переместите вашу привязку и информацию о конечной точке из файла конфигурации в ваш класс:

        protected BasicHttpBinding binding = new BasicHttpBinding()
        {
            Name = "Name your binding here",
            CloseTimeout = new TimeSpan(0, 1, 0),
            OpenTimeout = new TimeSpan(0, 1, 0),
            ReceiveTimeout = new TimeSpan(0, 10, 0),
            SendTimeout = new TimeSpan(0, 1, 0),
            AllowCookies = false,
            BypassProxyOnLocal = false,
            HostNameComparisonMode = HostNameComparisonMode.StrongWildcard,
            MaxBufferSize = 65536,
            MaxBufferPoolSize = 524288,
            MaxReceivedMessageSize = 65536,
            MessageEncoding = WSMessageEncoding.Text,
            TransferMode = TransferMode.Buffered,
            UseDefaultWebProxy = true,
            Security = new BasicHttpSecurity()
            {
            Mode = BasicHttpSecurityMode.Transport,
            Message = new BasicHttpMessageSecurity() { AlgorithmSuite = SecurityAlgorithmSuite.Default, ClientCredentialType = BasicHttpMessageCredentialType.UserName}, 
            Transport = new HttpTransportSecurity() { ClientCredentialType = HttpClientCredentialType.Digest }
            },
        };
        protected EndpointAddress endPoint = new EndpointAddress("http://localhost:55314/MyService.svc");

, а затем

MyServiceClient client = new MyServiceClient(binding, endpont);

Попробуйте и настройте привязкув ваши потребности, особенно «Безопасность».

2 голосов
/ 12 января 2014

BasicHttpBinding, похоже, не имеет свойства безопасности в WP8, я очень разочарован попыткой получить доступ к списку sharepoint в WP8. Xamarin IOS / Android это не проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...