Защита WCF WebService без использования сертификата - PullRequest
2 голосов
/ 04 марта 2011

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

Я хотел бы иметь возможность защитить имя пользователя / пароль от WebService без необходимости изменения каждого метода для проверкиимя пользователя и пароль и без необходимости использовать сертификат.Возможно ли это:

Мой текущий web.config ниже:

<?xml version="1.0"?>
<configuration>
 <system.web>
  <compilation debug="true" targetFramework="4.0" />
 </system.web>
 <system.serviceModel>
  <services>
   <service name="TestWS.Service1" behaviorConfiguration="Default">
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
    <endpoint contract="TestWS.IService1" binding="wsHttpBinding" bindingConfiguration="Binding1" address="" />
  </service>
 </services>
 <bindings>
  <wsHttpBinding>
    <binding name="Binding1">
      <security mode="Message">
       <message clientCredentialType="UserName"/>
      </security>
    </binding>
  </wsHttpBinding>
 </bindings>
 <behaviors>
  <serviceBehaviors>
    <behavior name="Default">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <serviceCredentials>
        <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="TestWS.Validation.VanguardValidator, TestWS" />
      </serviceCredentials>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
   </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
 </system.serviceModel>
 <system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
 </system.webServer>
</configuration>

Заранее спасибо,

Патрик

1 Ответ

3 голосов
/ 04 марта 2011

Если вы используете проверку имени пользователя / пароля, вы, скорее всего, будете отправлять учетные данные в виде простого текста в своем сообщении.Таким образом, вам либо нужно использовать защиту транспортного уровня (SSL) (https://....), либо у вас должен быть сертификат на стороне сервера, чтобы обеспечить средство общего секрета, чтобы сообщения между клиентом и сервером могли быть зашифрованыи подписано.Или вы можете отключить безопасность все вместе, если вы вообще ничего не хотите.

См. Основы безопасности WCF , где можно найти отличное введение в безопасность WCF, документы MSDN по программированию безопасности WCF или прекрасную статью MSDN Ювала Лоуи по ДекларативнуюWCF Security

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