Почему UserNamePasswordValidator.Validate не вызывается? - PullRequest
0 голосов
/ 25 января 2012

У меня есть простой веб-сервис, который размещен внутри консольного приложения. Это работает, с одной проблемой: аутентификация не работает должным образом.

Мой app.config выглядит следующим образом:

<system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="NewBinding0">
          <security mode="TransportWithMessageCredential">
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Mg">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom"
              customUserNamePasswordValidatorType="TSOWS.UserValidator,TSOWS" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <!--<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />-->
    <services >
      <service name="TSOWS.TSOWS"  behaviorConfiguration="Mg" >
        <endpoint address="/MyAddress"  binding="wsHttpBinding"  contract="TSOWS.ITSOWS"  />
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
        <host>
          <baseAddresses >
            <add baseAddress="http://10.120.170.181:8181/TSOWS.svc" />
          </baseAddresses>
        </host>
      </service >
    </services>
  </system.serviceModel>

и мой валидатор:

public class UserValidator : UserNamePasswordValidator
    {
        public override void Validate(string userName, string password)
        {
            if (null == userName || null == password)
            {
                throw new ArgumentNullException();
            }

            if (!(userName == "TSOWSUser" && password == "password"))
            {
                throw new SecurityTokenException("Unknown Username or Password");
            }


        }
    }

UserValidator.Validate никогда не вызывается, и веб-служба открыта, и нет необходимости указывать имя пользователя или пароль.

Есть идеи, почему это происходит?

Нужен ли мне сертификат сервера, чтобы можно было использовать аутентификацию?

1 Ответ

0 голосов
/ 07 февраля 2012

Вам нужен сертификат, чтобы это работало. Если ваше приложение для внутренней сети, используйте проверку подлинности Windows, которая не требует сертификата, но вам нужно определить пользователей в Windows.

...