пользовательская проверка имени пользователя в wcf - PullRequest
1 голос
/ 21 декабря 2010

У меня есть служба wcf и клиент, и я хотел бы обеспечить дополнительную защиту проверкой имени пользователя и пароля У меня есть следующий класс валидатора

public class UserCredentialsValidator : UserNamePasswordValidator
    {
        public override void Validate(string userName, string password)
        {
            if (!string.Equals(userName, Config.Login, StringComparison.InvariantCultureIgnoreCase)
                && !String.Equals(password, Config.Password))
            {
                throw new FaultException("Invalid user credentials. Access denied.");
            }
        }
    }

и следующая конфигурация сервера

<behaviors>
      <serviceBehaviors>
        <behavior name="serviceBehavior">
          <serviceDebug includeExceptionDetailInFaults="true"/>   <serviceCredentials>
                    <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="FileStorage.Core.ServiceModel.UserCredentialsValidator, FileStorage.Core"/>
                </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="FileStorage.Core.ServiceModel.FileStorageService" behaviorConfiguration="serviceBehavior">
        <endpoint address="" contract="FileStorage.IFileStorage" binding="wsHttpBinding" bindingConfiguration="bindingConfig"/>
      </service>
    </services>
    <bindings>
      <wsHttpBinding>
        <binding name="bindingConfig" maxBufferPoolSize="104857600" maxReceivedMessageSize="104857600" openTimeout="00:10:00" 
                 closeTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00">
          <readerQuotas maxDepth="32" maxStringContentLength="104857600" maxArrayLength="104857600"
                        maxBytesPerRead="104857600" maxNameTableCharCount="1024"/> <security mode="Message">
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>

Проблема в том, что CustomValidatir никогда не выполняет метод Validate, например логика проверки не выполняется

Что может вызвать это? Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 19 января 2012

Режим безопасности = "TransportWithMessageCredential" в порядке. Не уверен, зачем нам нужен транспорт clientCredentialType = "Basic" proxyCredentialType = "Basic" ...

Я использую транспортный clientCredentialType = "Certificate" protectionLevel = "EncryptAndSign" в моей Windows-службе, размещенной в WCF. Работает нормально.

0 голосов
/ 20 августа 2011

Попробуйте изменить раздел «Безопасность», чтобы прочитать это ...

<security mode="TransportWithMessageCredential">
    <transport clientCredentialType="Basic" proxyCredentialType="Basic" />
    <message clientCredentialType="UserName"/>
</security>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...