Пользовательская аутентификация WCF - PullRequest
0 голосов
/ 08 ноября 2010

Я пытаюсь (отчаянно) заставить поставщика аутентификации клиента работать на мою службу WCF.Пока у меня есть следующий код:

web.config

      <serviceCredentials>
        <userNameAuthentication userNamePasswordValidationMode="Custom"  customUserNamePasswordValidatorType="MyNamespace.CustomUserNameValidator, MyNamespace" />
      </serviceCredentials>

     <wsHttpBinding>
    <binding name="wsHttpBindingConfig" >
      <security mode="Message">
        <message clientCredentialType="UserName" />
      </security>
    </binding>
  </wsHttpBinding>

      <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>

Пользовательский класс аутентификатора;

public class CustomUserNameValidator : UserNamePasswordValidator
{
    public override void Validate(string userName, string password)
    {
        // have security details been provided?
        if (null == userName || null == password)
        {
            throw new ArgumentNullException();
        }

        // authenticate user
        if (!(userName == "test" && password == "test"))
        {
            // This throws an informative fault to the client.
            throw new FaultException("SecurityFailed");
        }
    }
}

Все компилируется нормально, но при использовании теста WCFклиент Visual Studio для вызова метода с именем Ping (ниже), пользовательский аутентификатор никогда не используется.Метод Ping только что выполняется, и любая точка останова, которая есть в моем классе CustomUserNameValidator.

Почему это так?Вся помощь приветствуется.

Ответы [ 3 ]

1 голос
/ 09 ноября 2010

В строке, где у вас есть

customUserNamePasswordValidatorType="MyNamespace.CustomUserNameValidator, MyNamespace"

вторая часть типа (у вас сейчас «MyNamespace») должна быть именем сборки, содержащей тип, без расширения файла.

См. этот вопрос для получения дополнительной помощи.

0 голосов
/ 10 ноября 2010

Я взял всю предоставленную вами информацию и создал шаблон web.config.Я бы предположил, что это выглядит примерно так:

<system.serviceModel>
   <services>
     <service name="<YourNameSpace>.<ServiceName>" <behaviorConfiguration="<YourNameSpace>.<BehaviorName>">
      <endpoint
        address=""
        binding="wsHttpBinding"
        bindingConfiguration="wsHttpBindingConfig"
        contract="<YourNameSpace>.<ServiceInterface>"
      />
         <!--Notice the binding is mexHttpsBinding, default is http-->
      <endpoint 
        address="mex" 
        binding="mexHttpsBinding" 
        contract="IMetadataExchange" 
      />
     </service>
   </services>
<behaviors>
   <serviceBehaviors>
       <behavior name="<YourNameSpace>.<BehaviorName>">
          <!--Notice the httpsGetEnabled, default is http-->
      <serviceMetadata httpsGetEnabled="true"/>
           <serviceDebug includeExceptionDetailInFaults="false"/>
           <serviceCredentials>
              <userNameAuthentication
                 userNamePasswordValidationMode="Custom"                 
                 customUserNamePasswordValidatorType="<YourNameSpace>.CustomUserNameValidator, <YourNameSpace>"
              />
           </serviceCredentials>
       </behavior>
   </serviceBehaviors>
</behaviors>
<bindings>
  <wsHttpBinding>
    <binding name="wsHttpBindingConfig">
      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName"/>
      </security>
    </binding>
  <wsHttpBinding>
</bindings>

0 голосов
/ 09 ноября 2010

Несколько предложений.

  1. WCFTestClient - не лучшее приложение.Вам лучше использовать такой инструмент, как SOAPUI (можно загрузить с сайта www.soapUI.org).WCFTestClient не импортирует все параметры конфигурации и не является лучшим методом для тестирования.
  2. Когда я использую CustomAuthentication, я настраиваю свою привязку так:

    Полагаю, вам понравится какая-то форма безопасности в будущем.Тестирование с использованием самозаверяющего сертификата SSL на вашем компьютере довольно просто.Больше информации о том, как это сделать здесь .

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