Достаточно ли просто иметь валидатор пользовательского имени пользователя в конечной точке web.config BindingConfiguration? - PullRequest
2 голосов
/ 13 мая 2011

У меня есть Имя пользователя / Пароль для проверки.Достаточно ли этого, чтобы оно было в атрибуте bindingConfiguration конечных точек в web.config, или мне нужно явно вызывать его в методе Service.Я заметил, что когда я не называю это операцией Service, она не вызывается.Я делаю что-то не так?

Вот как я определил свой раздел привязок:

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

Вот как я определил мой сервисный узел:

<service behaviorConfiguration="CustomValidator" name="Test.TestService">

У моего атрибута конечной точки есть свой BindingConfiguration = "CustomAuthentication"

Вот как у меня определяется поведение в моих свойствах ServiceBehaviors:

<behavior name="CustomValidator">
      <serviceCredentials>
        <userNameAuthentication userNamePasswordValidationMode="Custom"
                                 customUserNamePasswordValidatorType="Test.CustomUserNameValidator, FuzionSync"/>

        <serviceCertificate findValue="MyWebSite" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName"/>

        </serviceCredentials>

      <serviceMetadata httpGetEnabled="True"/>

    </behavior>

Когда я запускаю тестовый клиент wcf для вызова вызова службы,он даже не вызывает метод Validate.Единственный способ заставить его вызвать это, если я помещу это в операцию, которая будет вызвана явно.

1 Ответ

3 голосов
/ 13 мая 2011

Это необходимо указать как в конфигурации привязки, так и в поведении службы.Вот как это выглядит в одном из наших проектов (важными частями являются clientCredentialType="UserName" и элемент <serviceCredentials>):

<bindings>
  <wsHttpBinding>
    <binding name="SSLWithCustomAuthentication">
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="None" proxyCredentialType="None" />
        <message clientCredentialType="UserName" 
                 negotiateServiceCredential="true"
                 algorithmSuite="Default" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

<behaviors>
  <serviceBehaviors>
    <behavior name="customAuthenticationBehavior">
      <serviceCredentials>
        <userNameAuthentication 
          userNamePasswordValidationMode="Custom"
          customUserNamePasswordValidatorType="Namespace.YourValidator, AssemblyName"/>
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>
</behaviors>

, а затем ваш сервис использует behaviorConfiguration="customAuthenticationBehavior".

Обратите внимание, что я не думаю, что WCF позволяет использовать аутентификацию UserName без SSL.

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