2012-01-10 2 views
0

Мне нужно использовать аутентификацию SSL и HTTP в моем клиенте WCF для подключения к веб-службе. У меня есть конфигурация привязки клиента wcf, как показано ниже, и код для загрузки сертификата и передачи имени пользователя и пароля для авторизации http. Когда я это пробовал, я получаю сообщение об ошибке «HTTP-запрос неавторизован с помощью схемы аутентификации клиента« Аноним ». Аутентификация с сервера была« Basic realm = »ws.dataway.com:443». Удаленный сервер вернул ошибка:. (401) Несанкционированная Может кто-нибудь, пожалуйста, как решить эту проблему и то, что должно быть изменено в связывающей конфигурации БлагодаряКакой режим безопасности использовать в клиенте WCF с проверкой подлинности SSL и HTTP?

  <basicHttpBinding> 
      <binding name="OrderBinding" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
       allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
       useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <security mode="Transport"> 
        <transport clientCredentialType="Certificate" proxyCredentialType="None" 
         realm="" /> 
       </security> 
      </binding> 
      </basicHttpBinding> 

код:!

  ClientCredentials loginCredentials = new ClientCredentials(); 
      loginCredentials.UserName.UserName = this.UserId; 
      loginCredentials.UserName.Password = this.Password; 
      loginCredentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByIssuerName, "link.com"); 

      var defaultCredentials = channelFactory.Endpoint.Behaviors.Find<ClientCredentials>(); 
      channelFactory.Endpoint.Behaviors.Remove(defaultCredentials); 
      channelFactory.Endpoint.Behaviors.Add(loginCredentials); 
+0

Используете ли вы как клиентский сертификат, так и обычную проверку подлинности? –

+0

Да, в моем веб-сервисе documenation говорится, что клиент wcf должен предоставить сертификат клиента для обеспечения безопасности, а также требует базовой авторизации HTTP для всех вызовов веб-службы. Благодаря! – Jyina

+0

Спасибо! Можем ли мы указать сертификат и базовую авторизацию HTTP в клиенте wcf? – Jyina

ответ

2

Попробуйте связывание этого обычай:

<customBinding> 
    <binding name="Secured"> 
     <textMessageEncoding messageVersion="Soap11" /> 
     <httpsTransport authenticationScheme="Basic" 
         realm="ws.dataway.com:443" 
         requireClientCertificate="true" /> 
    </binding> 
    </customBinding> 
+0

Спасибо вам большое. Он отлично работает. Я потратил столько часов на то, чтобы понять это. – Jyina